A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 香草芭芙 于 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的话 可以释放...


3 个回复

倒序浏览
我问了下我的老师...虽然跟我说的比较那啥,但还是跟你说下把.

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

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

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

我现在也特别好奇!!!
回复 使用道具 举报
我试了下放到自动释放池中会被释放...

以后写代码都写到自动释放池里把...避免内存泄露{:2_33:}
回复 使用道具 举报
丶浩浩丶 发表于 2015-5-14 21:43
我试了下放到自动释放池中会被释放...

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

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

╮(╯▽╰)╭ 只能这样了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马