• 2011-05-15

    Objective c 内存管理

    Tag:

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://husu-azhong.blogbus.com/logs/128416376.html

    对于学习objective c的java党而言,内存管理估计是最让人头痛的地方了,因为java有垃圾回收的机制,而objective c 却不同,严格的说,是cocoa touch不支持垃圾回收,需要关注对象释放的问题。

    问题在于:并不是所有情况下都需要进行对象释放的,这就给人带来了很多麻烦,你到底该什么时候释放,而什么时候不需要释放呢?

    总的来说,当使用 alloc, copy, retain 来创建对象的时候,都需要手动来回收内存。

    而下面几种情况则不用

    1、通过常数产生的对象。

    比如 NSString *mystring=@"zifuchuang";

    因为事实上常数是放在一个静态的栈里的,会由系统来自动管理,所以释放了也是白释放。

    2、已经autorelease的对象和用构造方法产生的对象

    autorelease不用自己释放,这个很容易注意到,但是构造方法产生的对象也不用释放,就容易忽略了

    比如
    NSString *string = [NSString stringWithString:@"Hello!"];

    这个是不用释放的

    再比如 

    NSString *urlString = [hostUrl stringByAppendingFormat:@"iosjsp/showBuilder.jsp?pathcode=%@",pathcode];

    这个也是不用释放的。


    收藏到:Del.icio.us