【问题标题】:Retain cycle in AFNetworking success blockAFNetworking 成功块中的保留周期
【发布时间】:2013-11-15 09:57:01
【问题描述】:

通常,当在块中使用强引用(保留循环)时,Xcode 会显示警告。但是,我不明白为什么这个AFNetworking 示例没有显示它。

UIImageView *imageView;
AFHTTPRequestOperation *operation = [apiQueryManager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, NSData *responseObject) {
     UIImage *image = [UIImage imageWithData:responseObject];
     imageView.image =image;  // <--- using strong ref to imageView ?
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"ERROR: %@", error);
}];
[apiQueryManager enqueueHTTPRequestOperation:operation];

这里有保留循环吗?

【问题讨论】:

    标签: ios objective-c xcode objective-c-blocks retain-cycle


    【解决方案1】:

    由于imageViewimageView 要具有保留周期,需要对使用它的块有一个强引用。事实并非如此。

    【讨论】:

    • 在您的示例中,Noe,如果在块内使用operation,则会发生保留周期。
    • 好的,我现在明白了 :) 谢谢两位顺便说一句,我认为 AFNetworking 将成功块的参数作为弱引用(如果我没记错的话),所以,@GuyKogus,不会有保留周期?
    • 当一个对象保留一个保留该对象的块时,通常会发生保留循环(我知道这听起来很混乱)。当你调用一个块时,传入它的参数不会保留在块对象中(是的,块是对象),所以没有保留循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多