iPhone - 使用self初始化变量

1 iphone objective-c

所以,假设您在类头文件中声明了一个局部变量NSArray*myArray.

然后@property (nonatomic, retain) NSArray *myArray,您也可以在头文件中写入.

在你的.m文件中,你写@synthesize myArray.

到目前为止一切都很标准.你现在有一个变量myArray,可以通过Apple合成的setter和getters访问它.

稍后,您初始化变量.

NSArray *anArray = [[NSArray alloc] initWithObjects etc etc...];
self.myArray = anArray;
[anArray release];
Run Code Online (Sandbox Code Playgroud)

所以现在myArray指向内存中的数组,其释放计数为1(如果我没有记错的话).

我的问题是,为什么我们不能写

@property (nonatomic, assign) NSArray *myArray;
@synthesize myArray;
Run Code Online (Sandbox Code Playgroud)

..然后通过初始化写

self.myArray = [[NSArray alloc] initWithObjects etc etc...];
Run Code Online (Sandbox Code Playgroud)

自从我第一次见到它以来,这一直让我很困惑.这有技术原因吗?还是道德?;-)还是理论上的?

任何帮助将非常感激...

干杯

卡尔...

Dav*_*ong 5

其中一个属性点是让我们不必自己考虑内存管理.制作属性assign然后将保留对象分配给它会破坏使用属性的目的.

这很简单:

@property (nonatomic, retain) NSArray * myArray;
@synthesize myArray;

self.myArray = [NSArray arrayWithObjects:etc, etc1, etc2, nil];
Run Code Online (Sandbox Code Playgroud)

然后所有的内存管理都会为您完成.

  • 除非你观察并描述它是一个瓶颈,否则@Thomas不会优化.并且文档说你应该避免使用自动释放,以"永远不要懒惰释放内存".由于这不是问题(内存*将被保留),它完全是"腥"的.:) (3认同)
  • @ThomasBørlum:我们应该不惜一切代价避免自动释放的想法是提出一些好的建议.Apple只是意味着不要挥霍系统资源.自动释放对于Apple的框架来说是*基础*,并且在它是最佳解决方案的地方避免它只会导致更糟糕的代码.在这样的情况下(我们知道对象无论如何都会坚持),使用自动释放与释放的成本几乎不可测量. (2认同)