[英]weakSelf in enumerateObjectsUsingBlock?
我應該使用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時,我應該引用弱嗎?
這里不需要weak
。 對於復制到塊中的變量使用weak
的意圖是避免使用循環引用,並且您在此處沒有風險 - 部分原因是該塊未被保留。
請考慮以下示例。 在由self擁有的塊中捕獲self會導致無法打破的保留周期:
@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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.