我很想知道是否有任何 Cocoa 框架包含可能被误认为与人类打交道的初始化程序。明显的方法,(尽管我不知道它们是否存在或存在于何处)是initWithAge
, 或initWithName
.
是否有任何听起来很聪明的 Cocoa 初始化程序可能适用于人们?
编辑:
我当然不是在问new
运营商。这是您在琐事活动中可能会遇到的问题,但我对此非常认真。可以客观而明确地回答。是否有任何巧妙命名的 Cocoa 初始化器可以理解为指代人?
我很想知道是否有任何 Cocoa 框架包含可能被误认为与人类打交道的初始化程序。明显的方法,(尽管我不知道它们是否存在或存在于何处)是initWithAge
, 或initWithName
.
是否有任何听起来很聪明的 Cocoa 初始化程序可能适用于人们?
编辑:
我当然不是在问new
运营商。这是您在琐事活动中可能会遇到的问题,但我对此非常认真。可以客观而明确地回答。是否有任何巧妙命名的 Cocoa 初始化器可以理解为指代人?
所以,我想你在问这个:
是否存在用于初始化描述人的对象的既定约定?
所以,我要做的第一件事是 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.frameworkEKParticipant
来自 EventKitPSAuthor
来自 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:
方法)。
奇怪的问题……嗯……
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
所以他们可能不算数......