感谢您查看此帖子,如果您能帮助我,那就太好了。我一直在做一些Objective-c并且了解了内存管理的目标c方式,比如确保在我拥有对象时调用release,何时调用autorelease等。我也不想使用ARC或者新推出的GC,因为我喜欢管理自己的内存,我打算稍后进入iOS开发,我知道管理自己的内存是一个很好的做法。但是还有一个小细节,我似乎已经碰到了一堵砖墙。它与向对象发送-retain消息有关。我了解到发送-retain消息会将引用计数增加1.但是这是发送-retain的合适时间吗? :
- (void) setName : (NSString* ) theName
{
// name is an instance variable of type NSString
[theName retain]; // Must release this
name = [theName copy]; // Must release this in dealloc
[theName release]; // decrement the reference count because of retain
}
我应该打电话留在这里,以便我暂时拥有这个论点并确保它没有' 在我开始使用之前以某种方式获得释放?
任何帮助将不胜感激!谢谢!
答案 0 :(得分:4)
没有。您作为方法的参数提供的对象通常会在您的方法返回之前。您不需要那里的保留消息。您可以在此处复制字符串,以便在方法返回后将其保留。
在“避免导致您正在使用的对象重新分配”部分的this page上的Apple文档中记录了这一点。具体做法是:
Cocoa的所有权政策规定收到的对象应该 通常在调用方法的整个范围内保持有效。它 也应该可以从当前返回接收的对象 范围而不用担心它被释放。对你来说无关紧要 应用程序,对象的getter方法返回缓存 实例变量或计算值。重要的是那个对象 在您需要的时间内保持有效。
顺便说一句,你真的应该考虑使用ARC。管理自己的记忆并不好。无论管理自己的内存有多好,LLVM编译器仍然更好。管理自己的记忆将导致难以解决仅由您自己造成的问题。这是一个额外的认知负荷水平,你真的没有必要处理,当你最终让手动记忆管理去的时候,你会在你不知道的所有心理开销中松一口气。