您像任何其他类型一样返回一个结构。但是您应该知道,当返回一个结构时,您将返回堆栈上的内部值的副本作为临时变量。与实际返回指针的 Objective-C 对象不同。
您返回的类型必须是完整类型。这意味着,在您的方法声明中,您需要结构的定义。在您的情况下,这意味着您需要包含标题。
例如:
typedef struct MyStruct {
int a;
int b;
} MyStruct;
@interface MyClass : NSObject
+(MyStruct) theStruct;
@end
@implementation MyClass
+(MyStruct) theStruct {
MyStruct s = {.a = 1, .b = 2};
return s;
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
MyStruct s1 = [MyClass theStruct];
s1.a = 100;
s1.b = 100;
NSLog(@"s1 = {%d, %d}", s1.a, s1.b);
NSLog(@"MyStruct.theStruct = {%d, %d}", [MyClass theStruct].a, [MyClass theStruct].b);
[MyClass theStruct].a = 0; // has no effect!
}
return 0;
}
印刷:
s1 = {100, 100}
MyStruct.theStruct = {1, 2}