我很想知道是否有任何Cocoa框架包含可能被误认为与人类打交道的初始化程序。明显的方法(虽然我不知道它们是否存在或存在于何处)是initWithAge
或initWithName
。
有没有真正聪明的Cocoa初始化器可能适用于人?
修改
我当然不会问new
运算符。这是你在琐事活动中可能遇到的一个问题,但我对此非常认真。它可以客观和明确地回答。是否有任何巧妙命名的Cocoa初始化器可以被理解为指人?
答案 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次点击,主要是重复信息。但是有一些有趣的点击:
ABPerson
来自EventKit的EKParticipant
PSAuthor
不幸的是,这些结果都没有初始值设定项,因为它们主要用于与现有Person对象进行交互,而不是用于创建新对象。例外是-[ABPerson(ABPerson_vCard) initWithVCardRepresentation]
。这可能没有帮助。
所以我们需要继续挖掘。我们怎么能描述一个人? “人”? “会员”? “个人”? “顾客”?所有这些都是非常好的事情。
然后我记得有一个隐藏在OS X SDK深处的模糊框架,没有人真正谈过,称为Collaboration.framework:
Collaboration框架是一组Objective-C类,允许开发人员监控身份及其属性。 (reference)
看起来很有前途!事实上,在这里看到真正有趣的课程:CBIdentity
。 CBIdentity
“用于访问身份的属性”。有很多不同的方法来创建一个身份,但我喜欢这种模式,我建议这样做:
“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
所以他们可能不会计算......