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不会执行该代码,所以就正常。真的细节决定成败。










网友评论