繁体   English   中英

Objective-C类的通用初始化器

[英]Common Initializer for Objective-C Class

我已经在Objective-C编程多年了,我总是碰到这个问题:如果您的对象具有多个初始化程序,但是所有代码都有共同的代码,那么如何提取它呢?

我能想到的最好的是这样的:

@implementation Example

- (void)privateInitWithString:(NSString*)aString
{
  self.str = aString;
}

- (id)init
{
  self = [super initWithWindowNibName:@"MyNib"]
  if(self) {
    [self privateInitWithString:@""];
  }
  return self;
}

- (id)initWithString:(NSString*)aString
{
  self = [super initWithWindowNibName:@"MyNib"]
  if(self) {
    [self privateInitWithString:aString];
  }
  return self;
}

@end

在各个初始化器中,有很多重复代码会闻到。 但是,我无法想到一种方法来使一个初始化程序“陷入”另一种初始化方法,因为不能保证在调用[super init]之前已经设置了self

是否有我遗漏的最佳实践?

您编写一个 “指定的初始化程序”。 该初始化程序处理所有不同的情况。 在您的情况下,initWithString似乎是一个不错的选择。 初始化就变成

- (instancetype)init { return [self initWithString:@""]; }

你可以在这里读更多关于它的内容:

https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM