gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:41:56 24 4
gpt4 key购买 nike

我有一个工厂类构建了我定义的不同类型的 UITableViewCell,我们称它们为:TypeATableViewCell 和 TypeBTableViewCell。

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

+ (UITableViewCell*)getCellForIdentifier:(NSString*)identifier cellClass:(__weak Class)cellClass;

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

谢谢,尼古拉斯

最佳答案

一般来说,这无关紧要。 Classes 是有效的 interned——一旦注册到运行时,AFAICT,它们就永远不能注销,所以运行时将总是“保留”它们(就是这样)。单步执行程序集显示 +[NSObject retain] 是一个空操作(只返回 self,不做任何其他事情)。但是,如果您创建一个新的根类并尝试保留它,就像这样...

Class foo = objc_allocateClassPair(nil, "Foo", 0);
[foo retain];

... 运行时会呕吐,因为新的根类没有实现 retain 这意味着如果你想让你的 API 容忍没有实现 retain< 的新根类 你必须将它们的用途标记为 __weak 这样 ARC 就不会对它们调用 retain 。所以我想,技术上你会总是希望 Class 类型的变量是弱的,但在实践中它不太可能重要,因为任何你将用作表格单元格类,无论如何都必须从 UITableViewCell 继承(从 NSObject 继承。)

PS: 刚刚走过,NSProxy在这方面和NSObject是一样的。似乎只是返回 self 并且什么都不做。因此,除非您不打算创建新的根类,否则跳过 __weak 限定符可能是安全的。

关于ios - 为什么在 Objective-C 的函数定义中使用 (__weak Class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18926183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com