Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c C结构的目标C等价物是什么?_Objective C - Fatal编程技术网

Objective c C结构的目标C等价物是什么?

Objective c C结构的目标C等价物是什么?,objective-c,Objective C,我想在一个类似结构的数据结构中存储两个NSString NSArray和UIColor对象。Objective-C中最接近的等价物是什么?为什么不直接创建一个类 @interface MyClass : NSObject @property (strong) NSString *string; @property (strong) NSArray *array; @property (strong) UIColor *color; @end 为什么不去上课呢 @interface MyClas

我想在一个类似结构的数据结构中存储两个NSString NSArray和UIColor对象。Objective-C中最接近的等价物是什么?

为什么不直接创建一个类

@interface MyClass : NSObject
@property (strong) NSString *string;
@property (strong) NSArray *array;
@property (strong) UIColor *color;
@end

为什么不去上课呢

@interface MyClass : NSObject
@property (strong) NSString *string;
@property (strong) NSArray *array;
@property (strong) UIColor *color;
@end

您可以定义一个类作为数据结构


或者,由于Objective-C是C的超集,因此使用结构是完全正确的。

您可以定义一个类作为数据结构


或者,因为Objective-C是C的超集,所以使用结构非常好。

如果使用ARC,我建议您创建一个类,因为C结构不允许Objective C对象作为实例变量


如果没有,可以使用C结构,但您需要确保正确管理内存。

如果使用ARC,我建议您创建一个类,因为C结构不允许目标C对象作为实例变量



如果不是,那么可以使用C结构,但您需要确保正确管理内存。

这取决于您打算如何使用数据,但NSDictionarySumTableDictionary应该可以使用,或者是一个完整的类。@Jasoncoo我不确定您的意思-我认为现在有一些关于这个问题的高质量答案。这取决于您打算如何使用数据,但是NSDictionarySumTableDictionary应该是ok或者是一个完整的类。@Jasoncoo我不确定你的意思-我想现在这个问题有一些高质量的答案。你不能在C结构中存储目标C对象。@JeamesBone,嗯?为什么不呢?通常情况下,人们会存储指向上述对象的指针。在使用手动引用计数时,这是可能的,但在ARC中是禁止的。在ARC中,也可以通过将Objective-C类型声明为“不安全的”未恢复并自行管理它们,即。,确保对它们的强引用始终存在于其他地方,只要结构exists@JeamesBone它们不一定是“直接的C指针”,更重要的是ARC无法跟踪此实例中结构的生存期,因此它不知道何时可以安全地释放对象。它们仍然是对象引用,在语法上与ARC通常使用的指针类型相同。这与抛出void*和传递指针并不是同一个问题。不能在C结构中存储目标C对象。@JeamesBone,嗯?为什么不呢?通常情况下,人们会存储指向上述对象的指针。在使用手动引用计数时,这是可能的,但在ARC中是禁止的。在ARC中,也可以通过将Objective-C类型声明为“不安全的”未恢复并自行管理它们,即。,确保对它们的强引用始终存在于其他地方,只要结构exists@JeamesBone它们不一定是“直接的C指针”,更重要的是ARC无法跟踪此实例中结构的生存期,因此它不知道何时可以安全地释放对象。它们仍然是对象引用,在语法上与ARC通常使用的指针类型相同。这与抛出void*和传递指针不是一个问题。引用/引用将使这成为一个更好的答案。如果你正确地管理所有内容,C结构在ARC下也可以,只需将对象引用标记为“不安全”未恢复即可。然而,这是如此多的工作以至于不实用并且容易出错,仅仅创建一个类来保存数据要容易得多。引用/引用将使这成为一个更好的答案。如果您正确地管理所有内容,C结构在ARC下也可以,只需将对象引用标记为“不安全”或“未恢复”。然而,这是如此多的工作以至于不实用并且容易出错,仅仅创建一个类来保存数据要容易得多。我个人认为这是迄今为止最好的解决方案。即使您被迫使用一些极低级别的随机访问文件类型,您也可以将类序列化并写出它们,这是您无论如何都必须使用结构来完成的,但要做的工作要多得多。我的问题是,是否有一种简单的方法可以在没有单独文件的情况下完成这项工作。我从一个更大的类返回了一个类似结构的类。我刚刚在较大类的.h文件中添加了一个@interface。我还必须向.m文件添加一个空的实现。如果这个类是在更大的类内部使用的,我相信您可以将这两个部分都放在.m文件中。我个人认为这是迄今为止最好的解决方案。即使您被迫使用一些极低级别的随机访问文件类型,您也可以将类序列化并写出它们,这是您无论如何都必须使用结构来完成的,但要做的工作要多得多。我的问题是,是否有一种简单的方法可以在没有单独文件的情况下完成这项工作。我从一个更大的类返回了一个类似结构的类。我刚刚在较大类的.h文件中添加了一个@interface。我还必须向.m文件添加一个空的实现。如果该类在较大的类内部使用,我相信您可以将这两个部分都放在.m文件中。