ios面试题(1)

1、简述OC中的内存管理机制?与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic,atomic,strong,weak属性的作用?

答:(1)a、对你自己拥有的对象负责,你只能释放你所拥有的对象。b、凡是你通过retain 、alloc、copy等手段获得了所有权的对象,都必须在你不使用它的时候,由你来release、autorelease等手段来释放你对其所有权。c、在一段代码中alloc、retain、copy的操作次数应与release、autorelease的操作次数相等。

(2)、与retain配对使用的release  retain使引用计数+1,release使引用计数-1

(3)、与alloc配对使用的dealloc,  alloc 开辟内存,dealloc销毁内存空间    当引用计数为0时,dealloc销毁空间(回收内存)

(4)、readwrite 可读写 生成getter、setter方法               readonly 只读 只生成getter方法  这两个属性他们的真正价值,不是提供成员变量访问接口,而是控制成员变量的访问权限。

     assign适用于 基础数据类型和C数据类型  引用计数不+1   直接赋值  (例如:int、 float   、  delegate等)

     retain 对其他NSObject和其他子类  引用计数+1

   copy   对于Copy属性有一点要主要,被定义有copy属性的对象必须要符合NSCopying协议,并且你还必须实现了-(id)copyWithZone:(NSZone*)zone该方法对于可变对象为深拷贝(原对象引用计数不+1,是复制了一个新对象,其内存地址改变,新对象引用计数从0到1),对于不可变对象为浅拷贝(引用计数+1,是复制了该对象的内存地址)

nonatomic 非原子性的,不保证多线程下安全   natomic原子性,保证多线程下安全

Strong 、weak用于非ARC模式下,

Strong表明对象属于强引用类似于retain,但是比retain安全,只要对象存在拥有者,就可以引用不会被释放,只要对象失去了拥有者,立即被抛弃

weak型的指针变量仍然可以指向一个对象,但不属于对象的拥有者

1.执行下面的代码

__weak NSString *name = self.nameField.text; 


name变量和nameField.text属性都指向同一个NSString对象,但name不是拥有者


2.如果文本框的内容发生变化,则原先的NSString对象就没有拥有者,会被释放,此时name变量会自动变成nil,称为空指针


weak型的指针变量自动变为nil是非常方便的这样阻止了weak指针继续指向已释放对象,避免了野指针的产生,不然会导致非常难于寻找的Bug,空指针消除了类似的问题





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值