嘿,我只是试图让事情100%清楚在我的脑海,关于iPhone的内存管理,我很确定我有一个很好的理解,虽然我不是100 %自信。了解@property内存管理
让我们创建一个实例属性,它是一个的NSArray:
@interface ExampleAppDelegate : NSObject {
NSArray *myArray;
}
@property (nonatomic,retain) NSArray *myArray;
然后合成属性,以便我们可以使用getter和setter方法:
@synthesize myArray;
现在,这里是我得到稍微困惑..说我们在外部类创建一个数组,并将其分配给我们的代表myArray:
appDelegate = (ExampleAppDelegate *)[[UIApplication sharedApplication] delegate];
NSArray *exampleArray = [[NSArray alloc] init];
appDelegate.myArray = exampleArray;
[exampleArray release];
现在我们已经为myArray分配了一个保留计数为1,因为它已经占用了分配的exampleArray,因为这样我们将需要在委托dealloc内部调用release来让myArray在代理被销毁时不泄漏:
-(void)dealloc {
[super dealloc];
[myArray release];
}
虽然如果我是分配myArray的,像这样:
appDelegate = (ExampleAppDelegate *)[[UIApplication sharedApplication] delegate];
NSArray *exampleArray = [NSArray arrayWithObject:[NSString stringWithFormat:@"Hello world"]];
appDelegate.myArray = exampleArray;
我就不是必需的,因为内存管理是为我处理,这样做会在释放分配给myArray的对象调用[myArray release];
中的dealloc ?
''[super dealloc]''应该是你的''dealloc''方法中的最后一个。 XCode很可能会抱怨,如果它不是最后一个。 – 2011-03-17 16:33:02
感谢您的指点,我一直认为这是无关紧要的 – Alex 2011-03-17 16:57:13