在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