我已经使用 ojective c 快一周了,我主要是一个 c++ 编码器。在我阅读了苹果的内存管理指南之后,我尝试将我在 c++ 中的内存使用风格带入客观的 c... 我试图总结这些场景,如果我按照这些说明进行操作,我想我不会犯内存错误。如果我错了,请告诉我:)
我会尽量不使用自动释放,个人来说,使用自动释放,在某些自动释放池被耗尽之前,可能总会有一些冗余内存。我只会使用 release,它确保我的应用程序在任何时候都使用最少的内存。
Apple 说的另一件事,我用我自己的话来描述的是:每次我添加一个保留/分配/复制时,我都应该在某个地方添加一个发布。
以下是我总结的所有场景:
在同一个函数中:分配一个对象,使用它,然后释放它
在类的init函数中,分配一个对象,在类的dealloc函数中,释放对象
当需要拥有一个指针时,应该在类的方法中保留一个输入指针(比如说方法 A),然后在类的dealloc函数中释放指针。
我发现在objective c中使用retain的时机和在c/c++中使用memcpy的时机是一样的,所以我把retain当作“内存高效副本”
如果输入的保留指针要设置为成员指针变量,则应先释放成员指针。所以在case[3]中,类的init中的alloc与方法A中的release配对,方法A中的retain与dealloc中的release配对
返回一个指针作为返回值。老实说,当我使用 c++ 时,我从不做这样的事情。如果返回成员指针也没关系,因为有人会处理它:
-(UIButton*) getTheButton() { return theButton; }
但是返回一个指向本地分配对象的指针真的很糟糕:
-(UIButton*) getTheButton() { UIButton* myButton = [[UIButton alloc] init]; return myButton; //TERRIBLE! }
有人可能会说我应该在这种情况下使用自动释放,但我只是想通过使用这个来绕过该解决方案:我只会返回成员指针,或者我不会返回指针,我只会对给定的输入指针进行操作。
-void operateOnTheButton(UIButton* button) { [button release]; button = [[UIButton alloc] init]; }
因此,如果我按照上面的内存使用说明进行操作,请告诉我是否有任何问题。
感谢:D