首先让我说我对整个结构和联合事物都很陌生。 在发布这篇文章之前我已完成了我的作业,并诚实地试图获得合法的澄清。 如果这是错误的方式,请告诉我。 首先,我试图创建一个联合,因为我正在组合不同的数据类型。 我唯一真正的问题/问题是点运算符vs – >。 我可以得到我想用的工作
->
但不是
.
我只是好奇为什么? iv阅读堆栈上的一堆post,用“。”显示示例或“答案”,但在现实世界中没有运气。 我玩过“typedef”就像…
typedef union _myUnion { int intValue; bool boolValue; }myUnion;
但这并不能解决问题。 如果有人解释我做错了什么,将不胜感激。 这是我想要做的快速示例。 为了简单起见,我将发布一些struct / union语法,并且不会添加任何子类代码,因为这不是问题。
example.h文件
#import "<Foundation/Foundation.h" union myUnion { int intValue; bool boolValue; }; @interface MyClass : NSObject { union myUnion *someProperty; } @property (nonatomic, assign) union myUnion *someProperty; -(void)doSomething; @end
example.m
#import "MyClass.h" @implementation MyClass @synthesize someProperty = _someProperty; - (id)init { //Some init method... } - (void)doSomething { NSLog(@"I Did Something..."); } @end
所以现在在我的其他课上这个有用……
MyClass *newObject = [MyClass alloc] init]; newObject.someProperty->intValue = 6;
但这不……
MyClass *newObject = [MyClass alloc] init]; newObject.someProperty.intValue = 6;
在这个时间点,我更感兴趣的是为什么后者不起作用? 有趣的是,如果我取消属性的.h文件中的指针。
@interface MyClass : NSObject { union myUnion someProperty; } @property (nonatomic, assign) union myUnion someProperty;
“。” 工作而不是“ – >”,但现在它不可分配。
作为旁注,如果我将bool更改为int并使其成为结构,则会发生同样的事情。 不幸的是,我首先熟练掌握了Objective-c,并且随着我的进展慢慢地接受了严格的c。 所以我对c的理解有点弱,但这就是obc之美,我学习两种语言的价格就是一个! 如果你不算open-gl。
我会问,如果有人可以发布一个代码的工作示例,然后我可以弄清楚我做错了什么,或者彻底解释我做错了什么以及我错过了一些基本概念。 从那里我可以弄清楚如何编写自己的工作代码。 我不需要两者,并且不希望分手但是想学习,所以我可以解决我自己的问题,而不仅仅是修补错误的代码而不了解它是如何工作或为什么工作的。
a->b
运算符是(*a).b
简写 – 就像使用.
但先做一个解除引用。 当a
是指针时,这是合适的。
因为在您的原始示例中someProperty
是指向union的指针,所以您需要首先取消引用该指针。 这意味着你需要使用:
(*newObject.someProperty).intValue // confusing!
要么
newObject.someProperty->intValue // much better
访问它。
当然,一旦你将someProperty
改为union而不是指向union的指针,你可以使用.
代替。 所以:
在这种情况下,您很可能希望将union作为值 – 而不是指向外部存储器位置的指针:
@interface MyClass : NSObject { union myUnion someProperty; // << no '*' } @end
然后你使用成员访问的时间段:
someProperty.intValue = 6;
如果它是一个指针:
someProperty->intValue = 6;
但是,还有另一个问题。 您有两个(主要)选项可以将union用作属性。 值或指针。 这通常由值处理,尤其是当所有字段引用结构/联合的本地内存时,以及字段id不大时。 在这种情况下,您通常会返回并按值设置。 这意味着您的程序将按如下方式编写:
@interface MyClass : NSObject { union myUnion someProperty; } @property (nonatomic, assign) union myUnion someProperty; // << by value @end
然后客户端可以按值访问和设置它,如下所示:
union myUnion p = obj.someProperty; ++p.intValue; obj.someProperty = p;
而这就是通常使用不涉及共享资源的小型结构来实现的。
当然,如果您的实例可以直接访问它,您将不需要副本,如果您选择直接访问该字段:
- (void)doSomething { ++someProperty.intValue; }
如果这变得复杂, 抽象方法后面的数据可能是一个好主意,并将访问和变异留给持有联合的MyClass
实例。
以上就是c/c++开发分享objective-c union“ – >”vs“。”相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544620.html