我知道任何带有alloc,new或copy的东西都需要发布.
如果我这样做:
Nsstring *temp = [[Nsstring alloc] initWithString:@"Hello World"];
然后我需要最终添加[temp release / autorelease],因为我有一个alloc.
但是,如果我这样做:
Nsstring *temp = @"Hello World";
然后它似乎不需要发布声明.作为赋值的一部分,Nsstring类是否自动调用autorelease?
另外,在这些语句之后,这两个* temp对象之间有什么区别吗?它们都包含相同的字符串,但它们有不同的内存/使用方式吗?
@interface Person : NSObject { //ivars Nsstring *firstName; Nsstring *lastName; } //properties @property Nsstring *firstName; @property Nsstring *lastName; ///next file @implementation Person @synthesize firstName; @synthesize lastName; - (void) dealloc { //HERE!!!! [super dealloc]; }
我假设我不需要添加[firstName release]和[lastName release](在// HERE !!!!),因为这是由属性自动处理的.那是对的吗?
我明白如果我在代码中这样做(假设我已经定义了initWithFirstName):
Person *Me = [[Person alloc] initWithFirstName: @"Drew",lastName:"McGhie"];
以后我将不得不使用[我发布/自动发布];
到目前为止,任何确认或纠正我的理解的帮助都非常感谢.
POST ANSWER WRITE-UP
我想在完成所有答案并测试建议并谈论有效之后我会写下这一切.
我确实需要添加[firstName release],[lastName release],但我还需要添加(保留)属性描述.不添加(保留)引起的警告,因为它假定(赋值).这是我最终设置课程的方式
@interface Person : NSObject { //ivars Nsstring *firstName; Nsstring *lastName; } //properties @property (retain) Nsstring *firstName; @property (retain) Nsstring *lastName; ///next file @implementation Person @synthesize firstName; @synthesize lastName; - (void) dealloc { [firstName release]; [lastName release]; [super dealloc]; }
解决方法
我们可以根据规则处理字符串文字 – 您不需要释放它,因为您不拥有它.那很简单;没有必要担心他们是否是特殊情况,只要遵守规则就可以了.
我写了一篇博文,收集了articles about the Cocoa memory management rules;我建议跟进一些参考文献.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。