本人新手一个,对于objc以及swift与objc的混用完全不懂。
但是对于swift对象的回收机制还是略知一二的。今天就遇到了一个坑,这里记录下。
背景是我要监听AVPlayer的播放状态,需要调用到playerItem.addObserver
方法,该方法需要传入一个NSObject,于是我就自定义了一个类继承自NSObject。因为根据swift的经验,addObserver
方法内部一定会长期保持对该NSObject的引用,不用担心这个NSObject被回收,所以我直接为NSObject创建了一个局部变量并传给了addObserver
。
然后运行,播放视频,问题出现了,大致为objc的BAD_ACCESS错误。
为NSObject定义deinit,发现被调用。
于是把该对象引用赋值给类变量,问题解决。
个人猜测NSObject的回收机制是与普通swift类不同的。以后项目复杂了,这类问题可能会很难debug,所以在这里记录下。
注意NSObject被回收
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...