通过引用安全访问实例变量?

时间:2014-08-28 12:17:42

标签: ios objective-c objective-c-blocks

以下两个代码段之间有什么区别:

1

__block __weak NSMutableArray *arrBlock = self.arr ;
[[AsyncRequest initRequest:url onCompletedBlock:^(NSMutableArray *arr) {
         arrBlock = arr;
    }]ExecuteRequest];

2

id __weak weakself  = self;
[[AsyncRequest initRequest:url onCompletedBlock:^(NSMutableArray *arr) {
         weakself.arr = arr;
    }]ExecuteRequest];

它们都没有导致保留周期,但Apple suggests使用第一个保留周期。第二个问题有问题吗?

1 个答案:

答案 0 :(得分:1)

它们有不同的效果。第一个更新局部变量,第二个更新实例变量(属性)。

你要使用哪一个取决于你想要发生什么,但我怀疑你想要第二个,因为第一个看起来像无操作,如果该块是异步执行的。