黑马程序员技术交流社区

标题: 关于ARC 构造方法 类方法 & 非ARC 构造方法 类方法 [打印本页]

作者: 香草芭芙    时间: 2015-5-14 13:25
标题: 关于ARC 构造方法 类方法 & 非ARC 构造方法 类方法
本帖最后由 香草芭芙 于 2015-5-14 19:48 编辑

Person.h
  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. + (instancetype)person;
  4. @end
复制代码
Person.m
  1. #import <Foundation/Foundation.h>
  2. #import "Person.h"

  3. @implementation Person
  4. + (id)person
  5. {
  6.         return [[self alloc] init];
  7. }

  8. - (void)dealloc
  9. {
  10.         NSLog(@"我想被释放");
  11. }

  12. @end
复制代码

main.m
  1. #import <Foundation/Foundation.h>
  2. #import "Person.h"
  3. int main(int argc, const char * argv[])
  4. {
  5.         Person * p1 = [Person person]; // 这个为什么不释放呢???
  6.     Person * p2 = [[Person alloc] init]; //这个 被自动释放了,
  7.         return 0;
  8. }
复制代码

打印结果:
只有p2打印"我想被释放" , 求解惑啊...
用类方法创建的对象不能释放, 如果关闭ARC ,加个 release的话 可以释放...



作者: 丶浩浩丶    时间: 2015-5-14 21:35
我问了下我的老师...虽然跟我说的比较那啥,但还是跟你说下把.

他说系统内部会有很多池子.

有些特殊对象会被集中起来统一释放,比如说像这个调方法创建出来的对象..

只能帮你到这了...,虽然有点模棱两可

我现在也特别好奇!!!
作者: 丶浩浩丶    时间: 2015-5-14 21:43
我试了下放到自动释放池中会被释放...

以后写代码都写到自动释放池里把...避免内存泄露{:2_33:}
作者: 香草芭芙    时间: 2015-5-15 00:20
丶浩浩丶 发表于 2015-5-14 21:43
我试了下放到自动释放池中会被释放...

以后写代码都写到自动释放池里把...避免内存泄露 ...

恩, 开启ARC 代码写到 @autoreleasepool 能成功,

╮(╯▽╰)╭ 只能这样了.





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2