变更记录

序号 录入时间 录入人 备注
1 2016-01-20 Alfred Jiang -

方案名称

语法 - MRC 下全局变量的 Delegate 陷阱

关键字

语法 \ Objective-C \ MRC \ 成员变量 \ Delegate

需求场景

  1. 使用全局变量时赋值 delegate 需要注意的地方

参考链接

(无)

详细内容

在 MRC 代码中,当我们对全局成员变量的 delegate 进行赋值时,一定要记得在 dealloc 中释放该全局变量的同时对其中的 delegate 进行置 nil 操作。

否则会在下面的代码中造成 crash。

if (delegate && [delegate respondsToSelector:@selector(anymethod:)]) 
{ 
    [delegate anymethod:nil]; 
}

原因是 MRC 中 delegate 为 assign 修饰,assign 修饰在 self 置 nil 时该变量并不会置 nil。

所以我们必须在 dealloc 中显式的对 delegate 进行置 nil 操作。

与之对应的 ARC 中 delegate 为 weak 修饰,weak 修饰在 self 置 nil 时会自动对 delegate 进行置 nil 操作。

这也算是 ARC 的一个进步之处吧,缺点是 weak 的对象必须是 Objective-C 的对象。而 assign 可以修饰简单数据类型。

效果图

(无)

备注

(无)

results matching ""

    No results matching ""