是否可以在Objective-C中为匿名结构创建@属性?

是否可以在Objective-C中为匿名结构创建@属性?,objective-c,Objective C,我的代码中有一个匿名结构,我想通过assign@property(无指针)访问它。但是,由于这是一个匿名结构。下面是我创建的cocoa代码(即使它是cocoa代码,通常也与objective-c相关) 现在我想为_statusFlags创建一个属性: @property (nonatomic, assign) 是的,您只需在定义类型的位置内联定义它 @property(非原子,赋值)结构{…}状态标志 然后,当您合成它时,如果您真的喜欢带下划线的ivar,您可以执行@synthesis sta

我的代码中有一个匿名结构,我想通过assign@property(无指针)访问它。但是,由于这是一个匿名结构。下面是我创建的cocoa代码(即使它是cocoa代码,通常也与objective-c相关)

现在我想为_statusFlags创建一个属性:

@property (nonatomic, assign)

是的,您只需在定义类型的位置内联定义它

@property(非原子,赋值)结构{…}状态标志


然后,当您合成它时,如果您真的喜欢带下划线的ivar,您可以执行
@synthesis statusFlags=\u statusFlags
,但这将为您生成ivar。您不需要显式地定义它。

您也可以通过使属性或方法获取指向被击中对象的指针来实现,然后只需让编译器知道结构存在,而不需要知道结构中的内容,例如大小

struct myPrivateStruct;
...
@property(assign,nonatomic)  struct myPrivateStruct * myStructProperty;
struct myPrivateStruct { int a, b; float c; };

- (void)setMyStructProperty:(struct myPrivateStruct *)aValue
{
    memcpy(&myIVar,aValue,sizeof(struct myPrivateStruct));
}
然后必须在实现文件和属性中定义结构myPrivateStruct,例如手动实现属性

struct myPrivateStruct;
...
@property(assign,nonatomic)  struct myPrivateStruct * myStructProperty;
struct myPrivateStruct { int a, b; float c; };

- (void)setMyStructProperty:(struct myPrivateStruct *)aValue
{
    memcpy(&myIVar,aValue,sizeof(struct myPrivateStruct));
}

这与接口文件中的us@class类似,属于Objective-C类。

哦,我明白了。。这比我预想的要麻烦,但它是合乎逻辑的。至于带下划线的ivars。为什么我不喜欢它们呢?这会成为一些哲学语言的乐趣:)在其他线程中有很多关于它的讨论,但我的论点是没有任何理由访问原始ivar,所有的访问都应该通过属性访问器进行。我还收到了以下错误:ProfileViewController.m:61:错误:属性的类型“statusFlags”与ivar的类型“U statusFlags”不匹配这是我所做的:@property(nonatomic,assign)struct{BOOL isDeviceOwner:1;}statusFlags;您是否从接口块中删除了显式ivar?另外,我使用_ivar的唯一原因是在创建函数参数时避免变量冲突