Bloki iOS 5 ulegają awarii tylko z Release Build

Używam bloków i ARC, i znalazłem w niektórych sytuacjach, tylko iOS ulega awarii w wersji Release. W ten sposób pisanie kodu było niewłaściwe.

<code>-(IBAction)clickedButtonA:(UIBarButtonItem*)sender event:(UIEvent*)event {
  NSMutableArray *arrRows = [NSMutableArray arrayWithCapacity:0];
  #warning this code only crash on Release Build.... Don't use this
  NSMutableDictionary * dicRow = [NSMutableDictionary dictionaryWithCapacity:0];
  [arrRows addObject:dicRow];
  dispatch_block_t block = ^{
    NSString *str = [NSString stringWithFormat:@"%@",[_tweet valueForKey:@"text"]];
    [[UIPasteboard generalPasteboard] setString:str];
  };
  [dicRow setValue:block forKey:kDicKeyLinkPopBlock];

  NSMutableArray *sections = [NSMutableArray arrayWithObject:arrRows];
  TOVLinkPopoverViewController *controller= [[TOVLinkPopoverViewController alloc] init];
  controller.arrayLink = sections;
}
</code>

I od innego kontrolera, kiedy uzyskuję dostęp do bloku, zawiesza się on tylko w wersji kompilacji. Nauczyłem się, że musisz skopiować blok

<code>[dicRow setValue:[block copy] forKey:kDicKeyLinkPopBlock];
</code>

Dla świadomych bloków Klasa jak NSMutableDictionary.

Pytanie brzmi: „Dlaczego tylko zawiesza się w wersji Release?” Wiem, że to „powinno się zawiesić”, a to był niewłaściwy sposób użycia bloku, ale mając nadzieję, że zawiedzie na kompilacji Debugowania, możemy znaleźć ten rodzaj błędu wcześniej.

Jeszcze jedno pytanie brzmi: „Czy istnieje jakieś ustawienie kompilacji powodujące awarię tego kodu przy kompilacji debugowania?”

Możesz uruchomić przykładowy kod z gitHub,https://github.com/tomohisa/iOS_PopoverMenu_Notification

Zobacz ViewController.m i znajdź skomentowany kod (zawiesza się tylko przy wydaniu).

questionAnswers(1)

yourAnswerToTheQuestion