首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象Dealloc内存管理

对象Dealloc内存管理
EN

Stack Overflow用户
提问于 2011-03-30 18:50:47
回答 2查看 237关注 0票数 0

如果我有一个名为Catalog的对象,它有一个名为"title“的attrib (非原子的,保留的)attrib。我在目录的dealloc方法中做"attrib发布“:

代码语言:javascript
复制
-(void)dealloc {
    [title release], title = nil;
    [super dealloc];
}

稍后我做"Catalog *c = Catalog new;“。

比较1:

dto.title = [NSString alloc initWithFormat:@“.”,.];

2:

dto.title = NSString stringWithFormat:@“.”,.;

在dealloc方法中释放对象的所有attrib是常识,但是如果我传递一个访问器方法(它已经有了自动释放),该怎么办?我应该释放还是不释放访问者的属性在dealloc?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-30 18:56:22

title的setter保留了字符串,因此需要在-dealloc中释放它。你的第一个案子是错的..。您正在调用+alloc,后面跟着+stringWithFormat:。我怀疑你的意思是-initWithFormat:。另外,您需要在那里释放字符串,因为您正在分配它。在属性上调用-release是丑陋和不可靠的,因此在这种情况下使用临时变量是很常见的:

代码语言:javascript
复制
NSString *string = [[NSString alloc] initWithFormat:...];
dto.title = string;
[string release];
票数 4
EN

Stack Overflow用户

发布于 2011-03-30 18:55:10

如果访问器已经有了自动释放,那么就不要在dealloc中再次释放它。new+copy+alloc计数必须与release+autorelease计数匹配。

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

https://stackoverflow.com/questions/5490771

复制
相关文章

相似问题

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