我应该使用weakSelf,在以下代码中调用self时snippit(self.searchResults):
[self.restaurants enumerateObjectsUsingBlock:^(Restaurant *restaurant, NSUInteger idx, BOOL *stop) {
if ([scope isEqualToString:@"All"] || [restaurant.name isEqualToString:scope]) {
NSRange range = [restaurant.name rangeOfString:searchText
options:(NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch)];
if (range.length > 0) {
[self.searchResults addObject:restaurant];
}
}
}];
在块中调用self.searchResults时,我应该引用弱吗?
答案 0 :(得分:6)
weak
。将weak
用于复制到块中的变量的目的是避免使用循环引用,并且您在此处没有风险 - 部分原因是该块未被保留。
考虑以下示例。在自己拥有的区块中捕获自我会导致无法打破的保留周期:
@interface MyObject : NSObject
@property (copy, nonatomic) void (^contrived)();
@end
@implementation MyObject
- (id) init
{
self = [super init];
if ( self )
{
self.contrived = ^{
NSLog( @"%@", self.description );
};
}
return self;
}
@end