4

我很想知道是否有任何 Cocoa 框架包含可能被误认为与人类打交道的初始化程序。明显的方法,(尽管我不知道它们是否存在或存在于何处)是initWithAge, 或initWithName.

是否有任何听起来很聪明的 Cocoa 初始化程序可能适用于人们?

编辑:

我当然不是在问new运营商。这是您在琐事活动中可能会遇到的问题,但我对此非常认真。可以客观而明确地回答。是否有任何巧妙命名的 Cocoa 初始化器可以理解为指代人?

4

2 回答 2

14

所以,我你在问这个:

是否存在用于初始化描述人的对象的既定约定?

所以,我要做的第一件事是 grep 通过框架标题寻找对“人”的引用:

$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks
$ grep -r 'Person\b' . | edit

(是的,我默认查看 Mac SDK。查看 iOS SDK 将留给读者作为练习)

这为我带来了 381 次点击,大部分是重复的信息。但是有几个有趣的命中:

  • ABPerson来自 AddressBook.framework
  • EKParticipant来自 EventKit
  • PSAuthor来自 PubSub

不幸的是,这些结果都没有初始化器,因为它们都主要用于与现有的 Person 对象交互,而不是用于创建新对象。例外是-[ABPerson(ABPerson_vCard) initWithVCardRepresentation]。这可能没有帮助。

所以我们需要继续挖掘。我们还能如何描述一个人?“人们”?“成员”?“个人”?“顾客”?所有这些都是值得寻找的好东西。

然后我想起了在 OS X SDK 深处隐藏着一个没有人真正谈论过的晦涩难懂的框架,称为 Collaboration.framework:

Collaboration 框架是一组允许开发人员监视身份及其属性的 Objective-C 类。(参考

这看起来很有希望!确实,看这里有一个非常有趣的课程:CBIdentity. A CBIdentity“用于访问身份的属性”。有很多不同的方法可以创建身份,但我喜欢这种模式,我建议这样做:

“MBIdentity”类将定义规范地识别一个人的方法。所以你可以有-initWithSocialSecurityNumber:or-initWithName:-initWithBirthLocation:time:等。这个类的目的是建立一个足以识别个人的属性集合。

然后,您的“MBPerson”类将具有一个-initWithIdentity:采用MBIdentity. 然后,Person 将呈现其组合身份的特征。

我想这里要意识到的重要一点是有很多方法可以建立身份(因此有很多属性/初始化器MBIdentity)。但是一旦你建立了一个身份,只有一个Person有这个身份(所以你的Person类只有一个initWithIdentity:方法)。

于 2013-10-27T16:01:55.077 回答
1

奇怪的问题……嗯……

initWithKind: // nice, nasty...
initWithUser: // username
initWithColor: // black, white
initWithStyle: // cool, geeky
initWithTitle: // Dr
initWithSize: // big, small

组合版本

initWithTitle:@"Dr" message:@"You are crazy"
initWithTitle:@"Your Honour" style:@"serious" handler:@"wife"

虽然这些来自BlockKit所以他们可能不算数......

于 2013-10-27T15:12:07.450 回答