黑马程序员技术交流社区
标题:
关于ARC 构造方法 类方法 & 非ARC 构造方法 类方法
[打印本页]
作者:
香草芭芙
时间:
2015-5-14 13:25
标题:
关于ARC 构造方法 类方法 & 非ARC 构造方法 类方法
本帖最后由 香草芭芙 于 2015-5-14 19:48 编辑
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
+ (instancetype)person;
@end
复制代码
Person.m
#import <Foundation/Foundation.h>
#import "Person.h"
@implementation Person
+ (id)person
{
return [[self alloc] init];
}
- (void)dealloc
{
NSLog(@"我想被释放");
}
@end
复制代码
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
Person * p1 = [Person person]; // 这个为什么不释放呢???
Person * p2 = [[Person alloc] init]; //这个 被自动释放了,
return 0;
}
复制代码
打印结果:
只有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