我对iPhone程序中的dealloc功能有一些疑问。是否需要提供self.object_name版本或object_name版本可以吗?我有一个奇怪的问题,在我的dealloc函数中是这样的。
-(void) dealloc {
[self.listOfDates release];
[self.listOfDescriptions release];
[super dealloc];
}但是程序崩溃给了EXEC_BAD_ACCESS。这里的两个对象都是在初始化函数中为类分配的NSMutableArray实例。不带self的相同函数运行良好,即
-(void) dealloc {
[listOfDates release];
[listOfDescription release];
[super dealloc];
}下面是我如何声明该属性的
@property (nonatomic,retain) NSMutableArray *listOfDates;
@property (nonatomic,retain) NSMutableArray *listOfDescription;在实现文件中,我综合了这一点,在init函数中,我像这样分配了这些变量
self.listOfDates = [[NSMutableArray alloc] init];
self.listOfDescription = [[NSMutableArray alloc] init];那么是不是必须给自己呢?这里我漏掉了什么?
当我删除我用来复制NSMutableArrays实例的mutableCopy函数时,问题得到了解决,这些实例被作为参数传递给初始化函数,如下所示
-(id)initWithDate:(NSMutableArray *)dates andDescription:(NSMutableArray*)descriptions
{
if(self = [super initWithNibName:@"DateDescriptionControl" bundle:nil])
{
self.listOfDates = [[NSMutableArray alloc] init];
self.listOfDescription = [[NSMutableArray alloc] init];
self.listOfDates = [dates mutableCopy];
self.listOfDescription = [description mutableCopy];
}
return self;
}删除mutableCopy后,dealloc现在不会抛出EXEC_BAD_ACCESS。那么,我在哪里犯了错误,我仍然无法弄清楚:
发布于 2010-01-11 17:10:07
在dealloc函数中释放时不需要使用self。
发布于 2010-01-11 18:12:34
在dealloc中,您有两个选择:
[foobar release];或
self.foobar = nil;第二个相当于编写[self setFoobar:nil],它在setFoobar中:方法是释放前一个值的地方(假设属性被定义为使用保留或复制)。我倾向于使用第一种形式,您只需将release直接发送给对象,但这两种方式都可以。
从技术上讲,编写[self.foobar release]应该是可以的,尽管如果您稍后调用self.foobar = nil,该对象将被第二次释放(并导致EXC_BAD_ACCESS)。
发布于 2010-01-11 17:09:36
self.something表示[self something],因为点表示属性语法。你想要的是self->something。
https://stackoverflow.com/questions/2040766
复制相似问题