通知NSNotification
在注册者被回收时需要手动移除,是一直以来的使用准则。原因是在MRC
时代,通知中心持有的是注册者的unsafe_unretained
指针,在注册者被回收时若不对通知进行手动移除,则指针指向被回收的内存区域,成为野指针。这时再发送通知,便会造成crash
。而在iOS 9
以后,通知中心持有的是注册者的weak
指针,这时即使不对通知进行手动移除,指针也会在注册者被回收后自动置空。我们知道,向空指针发送消息是不会有问题的。
但是有一个例外。如果用- (id <NSObject>)addObserverForName:(nullable NSNotificationName)name object:(nullable id)obj queue:(nullable NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
这个API来注册通知,可以直接传入block
类型参数。使用这个API会导致注册者被系统retain
,因此仍然需要像以前一样手动移除通知,同时这个block
类型参数也需注意避免循环引用。
iOS 9 以后通知不再需要手动移除
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.职业 1.设计感:“设置一种计谋,让事情得以推进”。 2.共情:站在别人角度思考,甚至思考得比别人更深入。3....