“仅数据”Objective-C对象的更好替代方案?

“仅数据”Objective-C对象的更好替代方案?,第1张

概述我经常遇到这样的设计选择并且有点挣扎;我正在寻找其他一些观点. 我经常想要保留列表,或者传递基本上只是值集的状态块.值往往是原始类型:浮点数,NSTimeIntervals,CGPoints等. 我的第一个倾向通常是为这些属性集创建C结构,例如 typedef struct _STATE { float foo; NSTimeInterval elapsed; CGPoin 我经常遇到这样的设计选择并且有点挣扎;我正在寻找其他一些观点.

我经常想要保留列表,或者传递基本上只是值集的状态块.值往往是原始类型:浮点数,NSTimeIntervals,CGPoints等.

我的第一个倾向通常是为这些属性集创建C结构,例如

typedef struct _STATE {    float foo;    NSTimeInterval elapsed;    CGPoint point;} STATE;

等等

但是C结构与本机Cocoa集合类(NSArray,NSSet,NSDictionary)不能很好地结合使用,并且使用它们来跟踪很多状态,感觉就像它运行在我的Cocoa友好代码的其余部分 – 我最终拥有并直接管理结构数组,并在消息中传递struct指针等.

另一方面,由于原始性能不一定是关键,我可以将这些值编码为NSDictionary,将它们全部包装在NSValue或NSNumber中,但结果语法几乎不简洁,有点脆弱,需要类型和名称正确性插入和查找的运行时:

[stateDict setobject:[NSNumber numberWithfloat:foo] forKey:@"bar"];... float something = [[stateDict objectForKey:@"bar"] floatValue];

某些类型,如NSTimeInterval,只能与一些(可论证的)Hackery一起使用(在这种情况下,类型转换为double).

最后,我可以创建仅限数据的容器对象,包含私有成员数据,只有getter / setter. (这些在Java中被称为“bean”.)这些比字典更容易访问,更多Cocoa而不是结构,但对我来说感觉有些过分,特别是如果我只需要它们作为用于状态管理的“内部类”单个对象类型的内部.

你是如何,伟大的Cocoa编程公众,这样做?

解决方法 根据具体情况,我使用NSDictionary类运行任意数据,或者我创建容器类(Objective C中的@ property / synthesize标签使这非常简单).通过使用ObjC作为头文件:

@interface StateObject : NSObject {    NSNumber *foo;    NSTimeInterval *elapsed;    CGPoint point;}@property (retain) NSNumber *foo;@property (retain) NSTimeInterval *elapsed;@property (copy)   CGPoint point;@end

然后可以使用@synthesize< variable>在.m文件中自动创建setter / getters.然后,虽然匿名NSNumbers仍然是ornery,你可以这样做:

myStateObject.foo = [NSNumber numberWithfloat:7.0];

这应该可以消除大部分的痛苦,让你使用Cocoa集合类来更好地改变数据.

总结

以上是内存溢出为你收集整理的“仅数据”Objective-C对象的更好替代方案?全部内容,希望文章能够帮你解决“仅数据”Objective-C对象的更好替代方案?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存