2

假设我想要一个包含字符串作为键值的项目,使用我会编写的字典:

[NSDictionary dictionaryWithObject:@"someString" forKey:@"stringKey"];

我在问如何在没有字典(模棱两可,程序员需要知道键)或对象(这个瘦对象的过度杀伤,不需要方法)的情况下做到这一点,在结构行中更多的东西,我之前尝试过结构,但我没有在 iOS 中看到任何chars用作结构项的结构,所以我不确定这是要走的路。结果应该与此类似:

replacement.key = value;

有什么想法吗?

4

4 回答 4

2

除非您遇到非常专业的问题,否则小数据对象很少会过大。例如,如果你有成千上万个这样的对象,特别是如果你需要快速创建和销毁它们,并且你已经分析了你的应用程序并发现对象本身是一个真正的问题,那么你应该考虑不使用简单的数据对象. 但在一般情况下,您应该使用简单的数据对象。

于 2012-07-31T14:54:51.063 回答
1

@property一个带有和的薄对象@synthesize将为您节省创建方法的任何痛苦。所有实例变量都将在没有您的任何代码的情况下创建和修改。

这样的对象定义几乎不会比结构大,并且作为 的子类NSObject,它可以放在任何数组或其他只接受NSObject子类的框架容器中。您将无法使用结构来做到这一点。

如果您使用 XCode 4.4(用于 Mac 开发)或 4.5(用于 iOS),您甚至可以放弃@synthesize并且只有@property.

只有当您对性能非常严格并且需要摆脱NSObject层次结构时,您才应该考虑放弃它并使用 C 结构。

于 2012-07-31T15:03:16.280 回答
1

我不确定,如果它是你想要的,但你可以使用struct

 typedef struct {
    __unsafe_unretained NSString* key;
   ...
 } foo;

 foo bar;
 NSString* foobar = @"Hello";
 bar.key = foobar;

注意,ARC 没有理由不处理这个值。但是,如果您对该值有强引用,则可以使用它。

于 2012-07-31T14:50:42.513 回答
0

为什么不直接使用字典,而是创建一组 NSString 常量作为键?那么歧义就会减少。

例如,考虑 Apple 用于从 NSError 的 userInfo 字典中检索本地化字符串的键常量NSLocalizedDescriptionKey许多其他键也用于检索信息的特定部分,因为这些键是常量,所以它们很容易在 Xcode 中使用(自动完成)。另一个使用字符串常量从 NSDictionary 中检索值的例子是NSFileManager

此外,仅使用对象也应该没问题,在大多数情况下,“开销”应该可以忽略不计——当然用户不会注意到任何事情。至少,请不要尝试过早地优化您的代码,以应对在很远的将来可能发生的情况......

于 2012-07-31T15:03:25.200 回答