日常开发笔记(一)

2021-10-26  本文已影响0人  善良的皮蛋
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

修饰代理delegateweak还是assign
答案:使用weak

6.关于NSNotificationCenter消息没有触发

1,消息名用宏定义统一,消息名要在编译期就能确定,

2,一定要保证先addObserver,再post,

3,一定要确保post时还没有移除监听,

4,一定要保证post时监听对象还存在
在实际的开发过程中遇到过这样一个问题,首次打开app就无法在首页接受到通知,原因是在初始化添加通知之后 执行了下面代码

 [[NSNotificationCenter defaultCenter] removeObserver:self];

移除了通知,第二次重新进入app不会执行该代码,所以就正常。真的细节决定成败。

上一篇下一篇

猜你喜欢

热点阅读