typedef 语句

Typedef statement

使用 typedef 语句允许我们创建具有给定类型的新数据类型,例如 typedef NSString *String;

我还可以处理新类型 NSString:

    typedef NSString *String;
    String myString = @"Programming is";
    NSLog(@"%@", [myString stringByAppendingString:@"cool"]);

我的问题是 - 我不能使用 class 方法吗?以下代码产生错误:

    String newString = [[String alloc]init];

错误说:Receiver type 'String' (aka 'NSString') is not an Objective-C class

但是使用 typedef 语句我们得到相同的 NSString 对象(在我的理解中)同时具有 class 方法和实例方法。实例方法工作正常,class 方法无效。

为什么会这样?

请注意,当您说:

NSString *myString = [[NSString alloc] init];
^^^^^^^^^^             ^^^^^^^^

您使用了两种不同的类型,NSString *NSString。所以你要么需要两个 typedefs:

typedef NSString String;
typedef String *StringPtr;

StringPtr newString = [[String alloc]init];

或一个 typedef 并使间接寻址显式:

typedef NSString String;

String *newString = [[String alloc] init];