工程启用ARC后,delegate不能设置成assign属性了,只能是unsafe_unretained么
//.h id __unsafe_unretained _delegate; @property(nonatomic,unsafe_unretained) id <EGORefreshTableHeaderDelegate> delegate; //.m @synthesize delegate=_delegate; if (!_delegate) { return; }
unsafe_unretained的指针应该如何避免对象指向丢失,一旦丢失,即使是上面的if判断调用都会crash,如何处理呢
求教!!!
正确的写法是
__unsafe_unretained id<EGORefreshTableHeaderDelegate> _delegate;
@property(nonatomic,assign) id <EGORefreshTableHeaderDelegate> delegate;
crash和此处无关,是你别的地方已经释放了此对象。
如果此处改为强引用,则不可避免的造成retain cycle从而内存泄露,是万万不能的。你要做的是检查为何释放后还会被回调。