内存管理 问题集锦二

3、ARC 下 dealloc 方法存在的意义在于什么地方?举例说明一下具体的使用场景。

唯一一个留着 dealloc 方法的原因就是, 你需要释放一些不在 ARC 控制下的资源。 例如 Core Foundation 对象中调用 CFRelease(), 对那些通过 malloc() 分配的内存调用 free(), 注销通知,停止 Timer, 等等。

如果你是一个对象的代理的话,有时必须显式的断开和它的连接,但通常这都是自动的。 大部分情况下,代理都是弱引用(避免循环引用), 当一个即将被释放的对象是其他对象的代理的话, 当这个对象被销毁时,代理指针将会被自动设置为 nil。 弱指针在这之后会被自动清楚。

另外, 在你的 dealloc 方法中, 你仍然可以使用实例变量, 因为他们在这时候还没被释放掉。 在 dealloc 返回之前,都不会被释放。

4、分别写出在assign、retain、copy下属性对应的setter方法的内部实现。

----- assign

-(void)setName:(NSString *)name{
    if(_name != name){
        _name = name;
    }
}
----- retain

-(void)setName:(NSString *)name{
    if(_name != name){
        [_name release];
        [_name retain];
    }
}
----- copy

-(void)setName:(NSString *)name{
    if(_name != name){
        [_name release];
        [_name copy];
    }
}

-(NSString *)Name{
    return [[_name retain] autorelease];
}

5、在Category中本身不允许为已有的类添加新的属性或者成员变量,你有没有其他的方法可以在Category中添加属性或者是成员变量?

6、protected 和 public 都能够从外界改变属性,那么最大的区别是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值