簡體   English   中英

enumerateObjectsUsingBlock中的weakSelf?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM