ios – 为什么在Objective-C的函数定义中使用(__weak类)?

前端之家收集整理的这篇文章主要介绍了ios – 为什么在Objective-C的函数定义中使用(__weak类)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个工厂类,它构建了我定义的不同类型的UITableViewCell,让我们调用它们:TypeATableViewCell和TypeBTableViewCell.

现在我的工厂类中的方法定义如下:

(UITableViewCell *)getCellForIdentifier:(NSString *)标识符cellClass:(__ weak Class)cellClass;

为什么有人会在这里选择使用(__weak Class)而不是(Class).

谢谢,
萨科

解决方法

一般来说,这无关紧要.类被有效地实现 – 一旦在运行时AFAICT中注册,它们就永远不会被注销,因此运行时将始终“保留”它们(就这样).单步执行程序集显示[NSObject retain]是一个no-op(只返回self,不执行任何操作).但是,如果您创建一个新的根类并尝试保留它,就像这样……
Class foo = objc_allocateClassPair(nil,"Foo",0);
[foo retain];

…运行时将barf,因为新的root类没有实现retain意味着如果你希望你的API能够容忍那些没有实现retain的新的root类,你必须将它们的用途标记为__weak,这样ARC就不会呼叫保留在他们身上.所以我想,从技术上讲,你总是希望类型为Class的变量很弱,但实际上它不太可能,因为你作为表格单元类使用的任何东西都必须从UITableViewCell继承(它继承自NSObject. )

PS:刚刚介入它,NSProxy在这方面与NSObject相同.似乎只是回归自我而不做其他事情.因此,除非您不创建新的根类,否则您可能会安全地跳过__weak限定符.

原文链接:https://www.f2er.com/iOS/327857.html

猜你在找的iOS相关文章