Nic*_* M. 6 objective-c uitableview ios
我有一个工厂类,它构建了我定义的不同类型的UITableViewCell,让我们调用它们:TypeATableViewCell和TypeBTableViewCell.
现在我的工厂类中的方法定义如下:
+ (UITableViewCell*)getCellForIdentifier:(NSString*)identifier cellClass:(__weak Class)cellClass;
为什么有人会在这里选择使用(__weak Class)而不是(Class).
谢谢,尼古拉斯
ipm*_*mcc 10
一般来说,这无关紧要.Classes被有效地实现 - 一旦在运行时AFAICT中注册,它们就永远不会被注销,因此运行时总是"保留"它们(就这样).单步执行程序集显示这+[NSObject retain]是一个无操作(只返回自我,不做任何其他事情).但是,如果您创建一个新的根类并尝试保留它,就像这样......
Class foo = objc_allocateClassPair(nil, "Foo", 0);
[foo retain];
Run Code Online (Sandbox Code Playgroud)
...运行时将BARF,因为新根类不实现retain这意味着,如果你想你的API容忍不实施新的根类retain,你就必须标记其用途为__weak使ARC没叫retain上他们.所以我想,从技术上讲,你总是希望类型的变量Class很弱,但实际上它不太可能重要,因为你将作为表格单元类使用的任何东西都必须从中继承UITableViewCell(继承自NSObject.)
PS:刚刚介入它,NSProxy就像NSObject这方面一样.似乎只是返回而不self做任何其他事情.因此,除非您不创建新的根类,否则您可能会安全地跳过__weak限定符.
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |