che*_*ead 1 inheritance class objective-c factory-method
我在理解[[self alloc] init] 编写工厂方法的过程中遇到了麻烦.据我所知,工厂方法方便的方法来创建一个类的实例,而且他们做的alloc,init和autorelease你.我可以看到它是如何形成的,例如在NSArray使用工厂方法声明属性时arrayWithArray:,或者array等等要求它进行设置.我可以清楚地看到这与对allocand 的彻底(显式)调用有何不同init.
我的问题是我不了解更深层次的工厂方法.我在网上遇到一个解释说,不是调用alloc和init显式,而是可以使用类工厂方法基本上封装这样的东西:
+(instancetype)createWithString:(NSString *)string
{
return [[self alloc] initWithString:string];
}
Run Code Online (Sandbox Code Playgroud)
但是,如何instancetype和[self alloc]有效地让子类要利用类工厂方法?
instancetype是一个关键字,表示"此方法的返回类型是调用此方法的类的类型"(或子类).所以,如果你打电话[Baseclass createWithString:],返回类型是Baseclass *.但是,假设您创建了一个不重写此方法的子类.如果你打电话[Subclass createWithString:],返回类型是Subclass *(不是Baseclass *).
当类接收消息时,self指向该Class对象.所以在调用时[Baseclass createWithString:],self会指向该Baseclass对象.但是,当调用[Subclass createWithString:]时,self将指向Subclass,所以如果Subclass定义它自己alloc或initWithString:方法(也就是说,它会覆盖它们),则会调用它的版本.
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |