4

(有人请编辑标题,显然我对术语不太了解)

所以,假设我有一个名为的对象DataRequester,它的工作是创建一个NSURLConnection并成为它的代表。我从我的根视图控制器实例化对象,并且还提供了一个回调块(它是 的一个属性DataRequester)。完成NSURLConnection加载后,我调用回调并NSData作为参数传入。

现在,在定义完成块的根视图控制器中,我想将其存储在根视图控制器NSData的属性中。NSData (strong,nonatomic) *responseData我的问题是,在回调中我应该使用

weakSelf.responseData = [NSData dataWithData:passedInData]; 

或者我可以简单地使用:

 weakSelf.responseData = passedInData;

RootViewController * __weak weakSelf = self)该项目还使用ARC。

对正确答案的简要解释将不胜感激,并帮助我了解内存是如何管理的(我已经阅读了大量内容,但一个实际的示例/解释对我来说有很长的路要走)。

4

1 回答 1

0

我会使用一个copy属性:

NSData (copy,nonatomic) *responseData;  
// Then weakSelf.responseData = passedInData;

copy属性是指向具有可变子类的类的指针时,建议使用属性,以避免当您的对象在您不知道的情况下发生变异的情况。例如,假设有另一个类持有指向该数据对象的指针,并且它是可变的。它可能会在您不知道的情况下被其他班级更改。

如果属性是 ,则不需要复制它readonly,并且您确定它指向不可变对象。然而,向不可变对象发送复制消息并不昂贵:它返回对象本身。

于 2013-09-07T21:53:14.570 回答