是否有可用于描述人的Cocoa初始化器?

时间:2013-10-27 15:05:28

标签: objective-c cocoa naming-conventions

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

有没有真正聪明的Cocoa初始化器可能适用于人?

修改

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

2 个答案:

答案 0 :(得分:14)

所以,我认为你问这个:

  

是否存在初始化描述人物的对象的既定惯例?

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

$ 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次点击,主要是重复信息。但是有一些有趣的点击:

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

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

所以我们需要继续挖掘。我们怎么能描述一个人? “人”? “会员”? “个人”? “顾客”?所有这些都是非常好的事情。

然后我记得有一个隐藏在OS X SDK深处的模糊框架,没有人真正谈过,称为Collaboration.framework:

  

Collaboration框架是一组Objective-C类,允许开发人员监控身份及其属性。 (reference

看起来很有前途!事实上,在这里看到真正有趣的课程:CBIdentityCBIdentity“用于访问身份的属性”。有很多不同的方法来创建一个身份,但我喜欢这种模式,我建议这样做:

“MBIdentity”课程将定义规范识别某人的方法。因此,您可以拥有-initWithSocialSecurityNumber:-initWithName:-initWithBirthLocation:time:等。此类的目的是建立足以识别个人的属性集合。

您的“MBPerson”课程将采用-initWithIdentity:方法,该方法需要MBIdentity。然后,人将具有其组成身份的特征。

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

答案 1 :(得分: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所以他们可能不会计算......