【问题标题】:Designated Initializer and NSString Category指定初始化器和 NSString 类别
【发布时间】:2016-12-11 01:27:41
【问题描述】:
@implementation NSString (StringCategory)

-(id)init{
    self =[super init];
    return self;
}

-(id)initWithInput1:(NSString*)input1 input2:(NSString*)input2{

        input1 = [input1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        input2 = [input2 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];



        if(input1.length>0 && input2.length>0){
            self = [NSString stringWithFormat:@"%@###%@",input1,input2];
        }else if(input1.length>0){
            self = input1;
        }else if(input2.length>0){
            self = input2;
        }

    return self;
}
@end

以上代码产生以下输出。 1) 输入1=a , 输入2=b

a###b

2) 输入1=a;

一个

3)input2=b

b

它会导致以下警告

“便利初始化程序缺少对另一个初始化程序的‘自我’调用”

我不知道上述方法是否有效或会导致任何问题,因为init 是指定的初始化程序(不知道它是否会在旧 iOS 版本中出现问题)?

如果 input1 和 input2 都为 nil,则 NSString 输出应为 nil。

【问题讨论】:

  • initWithInput1:input2: 方法作为实例方法是没有意义的。应该是类方法,名称如combineInput1:andInput2:
  • 并且不要试图覆盖 Objective-C 类别中的方法。这是未定义的行为。

标签: objective-c nsstring categories


【解决方案1】:

如果input1.length == 0input2.length == 0,你不设置self,你不调用super init,你仍然返回self。在这种情况下,您可能想设置self = nilreturn nil

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多