日常开发笔记(一)
1. __kindof
__kindof
关键字的理解
一般结合泛型使用如
@property (strong, nonatomic, readonly) NSMutableArray<__kindof VSMVVMCollectionViewSectionModel *> *sectionModels;
表示数组可以包含model和model的子类
2.@weakify(self)、 @strongify(self)
参考讲解的很清楚,在block
中使用,和我们日常使用的自定义weakSelf 、 strongSelf功能一样。
注意:深入理解循环引用,有的并不会引起循环引用,要做区分。
3. dealloc
什么时候 调用
- (void)dealloc;
什么时候回调用dealloc?
1、这个类被release的时候会被调用;
2、这个对象的retain count为0的时候会被调用;
或者说一个对象或者类被置为nil的时候;
//常用于移除通知等
- (void)dealloc{
//移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:NEP_NotificationName_PerOrdereAutoMatchStore object:nil];
}
4.内联函数 NS_INLINE
5.delegate
修饰符
1.对于strong
:
该对象强引用delegate
,外界不能销毁delegate
对象,会导致循环引用(Retain Cycles
)
2.对于assing
:
assign
是指针赋值,不对引用计数操作,使用之后如果没有置为nil
,可能就会产生野指针。
@property (nonatomic, assign, readwrite) id delegate
;
即便delegate
指向的对象销毁了,delegate
中依然会保存之前对象的地址,即delegate
成为了一个野指针
。
3.对于weak
:
指明该对象并不负责保持delegate
这个对象,delegate
这个对象的销毁由外部控制。当delegate
指向的对象销毁后,delegate = nil
。
修饰代理delegate
用weak
还是assign
?
答案:使用weak
。
6.关于NSNotificationCenter
消息没有触发
1,消息名用宏定义统一,消息名要在编译期就能确定,
2,一定要保证先addObserver,再post,
3,一定要确保post时还没有移除监听,
4,一定要保证post时监听对象还存在
在实际的开发过程中遇到过这样一个问题,首次打开app就无法在首页接受到通知,原因是在初始化添加通知之后 执行了下面代码
[[NSNotificationCenter defaultCenter] removeObserver:self];
移除了通知,第二次重新进入app不会执行该代码,所以就正常。真的细节决定成败。