面试题-内存管理(ARC)

来源:互联网 发布:淘宝发布宝贝时间段 编辑:程序博客网 时间:2024/05/13 19:24

1. 内存管理的思考方式

引用计数内存管理的思考方式就是思考ARC所引起的变化

  • 自己生成的对象,自己所持有。
  • 非自己生成的对象,自己也能持有。
  • 自己持有的对象不再需要时释放。
  • 非自己持有的对象无法释放。

2. 理解ARC中追加的所有权声明

    Objective-C编程中为了处理对象,可将变量类型定义为id类型或各种对象类型。    所谓对象类型就是指向NSObject这样的Objective-C类的指针,例如“NSObject *”。id类型用于隐藏对象类型的类名部分,相当于C语言中常用的“void *”。    ARC有效时,id类型和对象类型同C语言其他类型不同,其类型上必须加所有权修饰符。所有权修饰符一共有4种。    __strong修饰符    __weak修饰符    __unsafe_unretained修饰符    __autoreleasing修饰符
  • __strong修饰符

        id和对象类型在没有明确指定所有权修饰符时,默认为__strong修饰符。
// ARC有效,下面两种表述一样id obj = [[NSObject alloc] init];id __strong obj = [[NSObject alloc] init];// ARC无效,现在看起来和上面一样id obj = [[NSObject alloc] init];// 加上作用域再看一下,ARC有效。明确指定了变量的作用域{    id __strong obj = [[NSObject alloc] init];}// ARC无效,为了释放生成并持有的对象,增加了调用release方法的代码。{    id __strong obj = [[NSObject alloc] init];    [obj release];}

__strong修饰符表示对对象的“强引用”。持有强引用的变量在超出其作用域被废弃,随着强引用的失效,引用的对象会随之释放。
__strong、__weak、__autoreleasing修饰符可以保证将附有这些修饰符的自动变量初始化为nil。

0 0
原创粉丝点击