7c9*_*fdf 3 objective-c ios objective-c-blocks
我应该使用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];
}
}
}];
Run Code Online (Sandbox Code Playgroud)
当我在块中调用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1487 次 |
| 最近记录: |