问题分享

记录一下 相关细节

  • 什么时候使用copy

1、属性声明为copy — 一些具有可变子类的对象(NSstring ,NSDictionary,NSArray等)

copy 声明的不可变对象 用其可变子类去赋值 则会进行一次深copy,从新生成一个变量,这样当改变其可变赋值时, 该对象不会改变

copy 声明的不可变对象 用同样为不可变对象去赋值 则会进行一次浅copy(跟strong 没区别,其引用计数器+1)

2、block 的声明

当block使用外部变量的时候,系统给block分配内存在栈区,栈区内存由系统管理,随时可能被释放,当我们继续使用block时可能访问野指针。当我们用copy修饰时,系统会将block copy到堆区,内存释放由开发者自己管理,不会出现上述野指针问题。

  • 哪些时候出现循环引用

1、NSTimer
定时器使用时设置target会使用self 通常我们使用NSTimer时都会把它加入到一个runloop中
runloop会对self对象做强引用 self的引用计数器+1 ,当我们没有把timer从runloop中释放出来时 self就会保持引用计数器的个数
timer认为调用方(self代表对象)被析构时会进入dealloc,在dealloc可以顺便将timer的计时停掉并且释放内存;但是从(self对象)的角度,他认为timer不停止计时不析构,那我永远没机会进入dealloc。
如何避免:当我们要离开该页面时 在viewWillDisappear或者viewDidDisappear 中调用 [timer invalidate]

2、 block(待补充)
block使用中经常会使用到其所属的对像
self.block = ^(){
self.*
};
一般修饰block我们使用copy
block示意图
3 delegate
代理在使用的时候一般我们申请为weak
一般delegate设置为包含该空间的父控件,存在着 父控件强引用子空间,子空间的delegate又是父控件的情况
当我们把delegate属性声明为strong时就形成一个引用循环,导致内存泄露,如果设置成weak则不会出现这种情况
如图
delegate示意图

  • 如何查找循环引用

每个页面重写dealloc方法,页面消失时看是否调用该方法
用xcode 提供工具 profile

  • NSArray与NSSet的区别

NSArray 是一个有序的队列,可以存放同一个对象多次
NSSet 无序 且不能重复存放同一个对象

  • NSArray内存分配上是怎样的

暂时搁浅

  • NSDictionary如何有序排列

  • UITableView针对cell不定高度如何优化性能

  • SDWebImage 如何区分在cell不断变化model的情况下显示图片
  • NSURLCache 的使用特点
  • delegate 属性声明设置为strong 会产生内存泄露么?为甚要使用weak进行声明
  • http 返回code含义
  • 常用加密算法使用场景
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值