我在.h中有以下代码:
@property (nonatomic, retain) NSArray *arrayData;
在方法initWithNibName中的.m:
self.arrayData = [NSArray arrayWithObjects:@"Usuario:",@"Password:",nil];
是正确的,以致于
[self.arrayData release]
安全地释放对象?
答案 0 :(得分:1)
您需要致电:
[arrayData release]
调用[self.arrayData release];在任何一种情况下都不会产生你想要的效果。
如果您想知道原因是什么,请查看以下问题:difference between [self.property release] and [property release]
答案 1 :(得分:1)
不,在您的财产上致电释放是不正确的。它的问题是,你释放你的属性,它将被释放,但你没有将指针设置为nil,所以有人可能会向你的属性发送消息并导致崩溃。
您可以做的是:
希望这有帮助。
答案 2 :(得分:1)
A) 在初始化程序中执行此操作是个坏主意(例如,initWithNibName:bundle :)
self.arrayData = [NSArray arrayWithObjects:@"Usuario:",@"Password:",nil];
改为使用:
arrayData = [[NSArray alloc] initWithObjects:@"Usuario:",@"Password:",nil];
你不应该在初始化程序或dealloc中调用这些访问器(属性)。
B)
是正确的,以致于
[self.arrayData release]
没有。在许多情况下(假设您实现了您声明的某些属性),您可能无法返回到ivar。您可能会收到副本,占位符对象或子类可能已选择重新实现访问器(作为一些示例)。在这些情况下,它很容易过度释放或过度保留(导致恶意,如泄漏和崩溃)。
这是典型的:
self.arrayData = nil;
除非你在声明ivar的对象的dealloc
中:
- (void)dealloc {
[arrayData release], arrayData = nil;
[super dealloc];
}