Appleのブロックプログラミングトピックとオンライン検索のデューデリジェンスを読みましたが、ブロックを正しく実装しているかどうかはまだわかりません。NSNotificationが送信されたときに入力されるプロパティとしてクライアントの配列があります。クライアントはテーブルビューデータソースとして使用されます。以下のコードは機能しますが、それが自己を保持サイクルに入れているのかどうか興味があります。私は次のようなことをしてから、ブロック内__block id theClients = self.clients;
を参照する必要がありますか?theClients
@property (strong, nonatomic) NSMutableArray *clients;
NSNotificationCenter *notifyCenter = [NSNotificationCenter defaultCenter];
__block id observer = [notifyCenter addObserverForName:queryHash
object:nil
queue:[[NSOperationQueue alloc] init]
usingBlock:^(NSNotification* notification){
// Explore notification
if ([[notification.userInfo objectForKey:kdatasetReturnKey] objectAtIndex:0]) {
NSArray *rows = [[notification.userInfo objectForKey:kdatasetReturnKey] objectAtIndex:0];
if (self.clients)
{
self.clients = nil;
}
self.clients = [[NSMutableArray alloc] initWithCapacity:rows.count];
for (NSDictionary *row in rows) {
[self.clients addObject:row];
}
} else {
NSLog(@"CLIENTS ERROR Returned: %@",[notification.userInfo objectForKey:kerrorReturnKey]);
}
[[NSNotificationCenter defaultCenter] removeObserver:observer];
}];