首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone内存释放问题

iPhone内存释放问题
EN

Stack Overflow用户
提问于 2010-01-11 17:05:18
回答 7查看 320关注 0票数 2

我对iPhone程序中的dealloc功能有一些疑问。是否需要提供self.object_name版本或object_name版本可以吗?我有一个奇怪的问题,在我的dealloc函数中是这样的。

代码语言:javascript
复制
-(void) dealloc {
   [self.listOfDates release];
   [self.listOfDescriptions release];
   [super dealloc];
 }

但是程序崩溃给了EXEC_BAD_ACCESS。这里的两个对象都是在初始化函数中为类分配的NSMutableArray实例。不带self的相同函数运行良好,即

代码语言:javascript
复制
-(void) dealloc {
    [listOfDates release];
    [listOfDescription release];
    [super dealloc];
 }

下面是我如何声明该属性的

代码语言:javascript
复制
@property (nonatomic,retain) NSMutableArray *listOfDates;
@property (nonatomic,retain) NSMutableArray *listOfDescription;

在实现文件中,我综合了这一点,在init函数中,我像这样分配了这些变量

代码语言:javascript
复制
self.listOfDates = [[NSMutableArray alloc] init];
self.listOfDescription = [[NSMutableArray alloc] init];

那么是不是必须给自己呢?这里我漏掉了什么?

当我删除我用来复制NSMutableArrays实例的mutableCopy函数时,问题得到了解决,这些实例被作为参数传递给初始化函数,如下所示

代码语言:javascript
复制
-(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。那么,我在哪里犯了错误,我仍然无法弄清楚:

EN

回答 7

Stack Overflow用户

发布于 2010-01-11 17:10:07

在dealloc函数中释放时不需要使用self。

票数 2
EN

Stack Overflow用户

发布于 2010-01-11 18:12:34

在dealloc中,您有两个选择:

代码语言:javascript
复制
[foobar release];

代码语言:javascript
复制
self.foobar = nil;

第二个相当于编写[self setFoobar:nil],它在setFoobar中:方法是释放前一个值的地方(假设属性被定义为使用保留或复制)。我倾向于使用第一种形式,您只需将release直接发送给对象,但这两种方式都可以。

从技术上讲,编写[self.foobar release]应该是可以的,尽管如果您稍后调用self.foobar = nil,该对象将被第二次释放(并导致EXC_BAD_ACCESS)。

票数 2
EN

Stack Overflow用户

发布于 2010-01-11 17:09:36

self.something表示[self something],因为点表示属性语法。你想要的是self->something

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2040766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档