在iPhone的Objective-C世界性能,我已经随处可见这种模式,我用它自己所有的时间并没有真正理解正在发生的事情:“初始化”,这是保留
在Test.h
@interface Test: UIViewController
{
NSMutableArray *testArray;
}
@property (retain, nonatomic) NSMutableArray *testArray;
而且在Test.m
@implementation Test
@synthesize testArray
- (void) viewDidLoad
{
// why do we do this?
NSMutableArray *init = [[NSMutableArray alloc] init];
self.testArray = init;
[init release];
[self.testArray addObject: @"A"]; // why can't I do this directly?
...
}
- (void) dealloc
{
[testArray release];
[super dealloc];
}
我的问题是:如果testArray上有一个保留,当它在属性的声明,为什么我们需要创建一个新的NSMutableArray初始化对象,分配日在测试数组并释放?为什么我不能在viewDidLoad中开始使用testArray而不做其他任何事情?我知道有关这样做的最佳方式(创建一个新对象或使用autorelease对象)存在一些争议,但在这两种情况下,我们都以testArray的保留计数为1结束。我相信'保留'财产已经给了它。那么为什么需要创建这个init对象呢?
谢谢;现在有道理。 – 2009-12-20 22:00:18