如果你可以在 Cocoa 中添加任何东西,那会是什么?您会说 Cocoa 中是否缺少任何主要或次要功能。也许因为框架中的一个遗漏,你不得不一遍又一遍地发明一个轮子?
12 回答
内置的正则表达式支持(la RegexKit)将非常方便。NSRegularExpression 在 iOS 4.0+ 上可用,但在 Mac OS X 上仍然不可用。
一种从大型文本文件中逐步读取 NSString 对象的简单方法,而无需将整个内容加载到内存中。(NSInputStream 和 NSFileHandle 不能满足这一点。)
有选择地使 NSSet/NSMutableSet/NSCountedSet 按排序顺序存储和枚举对象(如二叉搜索树)的能力肯定会受到欢迎。Cocoa 数组也是如此——目前我必须调用类似
-[NSArray sortedArrayUsingSelector:]
or-[NSMutableArray sortUsingSelector:]
来获取排序数组,而对于集合,我必须首先创建数组。堆/优先级队列。围绕CFBinaryHeap的 Cocoa 包装器(绝对不像 Cocoa 集合那样容易使用)可能会起作用。
可以为每个键存储多个值的字典,通常称为multiset。NSCountedSet 几乎是一个多重集/包,对于键值关联(NSMultiDictionary?)有相同的东西会很好,而不必自己滚动。
FSEvents的友好包装器。(CFFileDescriptor 做了一些工作,但它不是 Cocoa 简单的。)
一种从格式字符串和对象数组(不仅仅是可变参数)创建 NSString 的方法。这个 SO 答案显示了一个例子。让它与原语一起工作会很棘手......也许是一个NSPointerArray?
一致的集中式 API,可简化各种语言环境的电话号码格式(和解析)。目前,您必须使用 NSNumberFormatter(或 NSScanner)自行开发,该过程繁琐且容易出错。(例如,请参阅NSNumberFormatter 格式化美国电话号码并从 NSString 中删除除数字之外的所有数字。)
当然,总的来说,我绝对是各种数据结构的粉丝,尽管 Cocoa 的简单性与某些语言相比令人耳目一新。
一种指定在 dealloc 中自动释放的复制/保留属性的方法。也许
@property (nonatomic, copy, dealloc) NSString* name;
当然还有 RegexKit。
Core Data 的多用户支持。可以梦想 :)
但至少 Core Data 现在可以在装有 OS 3.0 的 iPhone 上使用。
一种将整个核心数据实体标记为瞬态的方法。这对于实现 Bonjour 共享特别有用。
例如,假设我有一个类似 iTunes 的模型,带有Playlist
和Song
实体。目前,为了实现 Bonjour 共享,我创建了两个额外的NSObject
子类TransientPlaylist
和TransientSong
,它们实现了与 Core Data 对应的所有相同方法。
我不应该仅仅为了拥有我的对象的瞬态版本而将模型类的数量翻倍——而不是当我希望它们的行为完全相同时,没有持久性。
(是的,另一种选择是拥有一个内存中的持久存储,其中包含您想要暂时的所有实体。无论哪种方式,这都是不必要的开销)
Keychain Services的更友好的包装器。
- 良好的正则表达式支持
- AppKit 中的布局管理器。自动调整大小并不适合复杂的 GUI。
@property (..,copy)
支持可变类型类(NSMutableArray
,NSMutableDictionary
等)。目前,如果您为可变类型类的属性分配值,则创建的对象将是不可变的(由于复制)。
对 Web 服务的适当支持。
从 .NET 世界进入 Cocoa,我有一个要求:LINQ!
在过去的几个月里,我越来越喜欢能够在我附近的任何集合上使用 LINQ。
当然,从管理对象上下文到 SQL 数据库服务器的合理接口会非常酷。
我希望看到用程序创建的单元格编写自定义视图的更好示例,所有这些都可以很好地自动滚动。
此外,IB 对带有工作分离器的复杂多窗格窗口的支持似乎存在真正的差距。我想他们正在研究这个?
不管决议独立性发生了什么,对吧?
对导入/导出的内置 JSON 支持。
绝对是Carbon HotKeys的对应物!