Nic*_*eet 17 allocation initialization objective-c self
我正在阅读Mac上的 Mark Dalrymple的Learn Objective-C(仅在Protocols的章节,所以还是相对较新的)并试图找出一些东西:
你为什么要用自己的名字引用一个类?如果我上课了Foo,为什么我要写,比方说,
[[Foo alloc] init]
Run Code Online (Sandbox Code Playgroud)
并不是
[[[self class] alloc] init]
Run Code Online (Sandbox Code Playgroud)
如果我有一个子类Bar,第一个选项不会使我无效
[[Bar alloc] init]
Run Code Online (Sandbox Code Playgroud)
而第二种选择会允许吗?第一种选择什么时候会更好?
mip*_*adi 27
通常,在类方法中,您可以使用[[self alloc] init].例如,为类编写便捷方法的规范方法是:
+ (id)fooWithBar:(Bar *)aBar
{
return [[[self alloc] initWithBar:aBar] autorelease];
}
Run Code Online (Sandbox Code Playgroud)
(注意,在类方法中,self指的是类对象.)
但是,[[Foo alloc] init]如果您确实需要Foo类的实例(而不是子类),则可以使用(即显式类名).
只要你想要那个类,你就可以用它的名字来引用一个类.如果子类是从该类派生的,则同一方法中的self将代表该派生类.因此,如果要显式实例化超类,可以这样做.
有时这可能是有道理的.要么强制子类重写该方法,以便返回它的类的实例.或者返回一个不同的类,比如在创建NSArray等时使用的占位符对象.
| 归档时间: |
|
| 查看次数: |
5180 次 |
| 最近记录: |