Does Objective-C forbid use of structs?

前端 未结 3 785
执念已碎
执念已碎 2021-02-20 02:53

I\'m new to Objective C

I tried using a simple struct and got

arc forbids objective-c objects in struct

Looking up ARC, it

3条回答
  •  忘掉有多难
    2021-02-20 03:26

    You can use struct in Objective-C++ with ARC in any case.

    #import 
    
    @interface City : NSObject
    struct Data {
        NSString *name;
    };
    
    @property struct Data data;
    @end
    
    @implementation City
    @end
    
    int main()
    {
        City *city = [[City alloc] init];
        city.data = (struct Data){@"San Francisco"};
        NSLog(@"%@", city.data.name);
        return 0;
    }
    

    If you compile it as Objective-C, you failed as you said.

    $ clang -x objective-c -fobjc-arc a.m -framework Foundation 
    a.m:5:15: error: ARC forbids Objective-C objects in struct
        NSString *name;
                  ^
    1 error generated.
    

    Because C struct doesn't have the capability of management for variable life span.

    But in C++, struct does have destructor function. So C++ struct is compatible with ARC.

    $ clang++ -x objective-c++ -fobjc-arc a.m -framework Foundation
    $ ./a.out
    San Francisco
    

提交回复
热议问题