iOS代码规范:初始化方法

关于更多代码规范,可以点击查看《iOS代码规范

在日常开发中,会多人同时开发一个需求。同事A提供了自定义初始化方法,但是同事B却调用了默认的初始化方法,因为同事A在自定义初始化方法中做了一些特殊操作,导致同事B使用默认初始化方法却没有达到预期的效果,然后又浪费了很多精力与同事A进行沟通查找问题

当面对多个初始化方法时,外部调用者可能不知道哪一个才是正确的初始化方法。为此苹果提供了两个关键字 NS_UNAVAILABLENS_DESIGNATED_INITIALIZER来帮助我们约束对象的初始化方法,使得接口描述更加清晰。

  • NS_DESIGNATED_INITIALIZER:用来将修饰的方法标记为指定构造器
  • NS_UNAVAILABLE:禁止使用某个初始化方法

如果希望外部调用接口的时候,传入一些基本的参数用来初始化。而不希望使用默认的初始化方法,我们可以这么做:

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;

+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithName:(NSString*)name NS_DESIGNATED_INITIALIZER;
@end

@implementation Person

- (instancetype)initWithName:(NSString *)name {
    if ( self = [super init] ) {
        self.name = name;
    }
    return self;
}

@end

当创建一个Person对象的时候,如果使用NS_UNAVAILABLE修饰的[Person new]和[[Person alloc]init]方法,那么就会出现错误

// Xcode报错:'new' is unavailable
Person* person1 = [Person new];
// Xcode报错:'init' is unavailable
Person* person2 = [[Person alloc]init];
// 正确
Person* person3 = [[Person alloc]initWithName:@"XiaoMing"];

参考

猜你喜欢

转载自blog.csdn.net/weixin_33777877/article/details/87045398