instancetype
在一些对象创建和初始化方法中,常看到方法返回类型为instancetype,比如NSObject中
+ (instancetype)new OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
+ (instancetype)allocWithZone:(struct _NSZone *)zone OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
+ (instancetype)alloc OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
- (void)dealloc OBJC_SWIFT_UNAVAILABLE("use 'deinit' to define a de-initializer");
instancetype类型是调用该方法的类实例对象指针,因此instancetype类型是不确定的,动态变化的,运行时才能确定
@interface FBAnimal : NSObject
+ (instancetype)createAnimal;
- (instancetype)initAnimal;
@end
@implementation FBAnimal
+ (instancetype)createAnimal
{
return [[[self class] alloc] init];
}
- (instancetype)initAnimal
{
self = [super init];
return self;
}
@e