根据Apple guideline,似乎令人困惑,例如方法viewWithTag
在Java中,我会有一个名为
的方法getViewByTag // Java version, equivalent to viewWithTag in Obj-C
但我也发现有一些方法,例如objectForKey
,那么为什么不使用objectWithKey
呢?
getObjectByKey or just get // Java version, equivalent to objectForKey,
// but why not objectWithKey? Or not viewForKey above?
答案 0 :(得分:5)
我实际上认为它比大多数答案想象的要简单得多。我认为它与复杂的编程语言细节关系不大,而且更多地与相关对象的唯一性有关。
当您说viewWithTag:
时,您询问UIView
任何视图是否包含该标记。可能有几个。 UIView
将返回其中一个。
然而,objectForKey:
(对我来说)听起来应该有一个与该键相关联的单个对象(或nil)。因此,关键类型存在并且绑定(紧密耦合)到单个对象。
修改强>
有一个答案提到“by”的存在,这进一步暗示了约定如何与编程语言的复杂性无关。这只是天生的英语。
例如, NSString
的{{1}}使用by,只是因为该函数是使用动词附加编写的。你不能说有关,这是不好的英语。
答案 1 :(得分:3)
从我的观察
在设置/获取对象时,使用 WITH 。
e.g。用于设置NSMutableArray对象
- (id)initWithCapacity:(NSUInteger)numItems
在设置/获取对象的属性时,使用 FOR 。
例如,为NSMutableDictionary类型的属性设置值
- (void)setValue:(id)value forKey:(NSString *)key
希望这有助于消除疑虑
答案 2 :(得分:3)
似乎with
用于直接属于对象的属性。 UIView
具有tag
属性,因此viewWithTag:14
可以改为"查找标记属性为14" 的视图。
当您将对象放入与键相关联的字典中时,此键不一定是对象本身的一部分。 objectForKey:@"foo"
是一种说出"找一个与该键相关联的对象" foo" 的方法。
答案 3 :(得分:0)
Apple指南不对何时使用或与之一起提出任何此类声明。编码约定的要点是指出参数的类型可能是什么,并编写自然发声的方法签名。
方法名称中for或with的原因是识别方法的第一个参数的类型或目的,这有助于它更好地阅读。
Apple本身使用了几种约定,但这是基本目的,没有具体的对错,只是尝试使用for或with来识别方法名称中方法的第一个参数。
至于Apple惯例 - get(无论如何)甚至不是实际约定的一部分,所以你可以问我什么时候使用get。
阅读此http://cocoadevcentral.com/articles/000082.php
也不要忘记(通过)NSURL urlByAppendingPathComponent等 - 感受它并且你不会出错
答案 4 :(得分:0)
无论何时拥有或拥有参数,您都会使用“with”,或者“with”字左侧的对象将使用相对永久的属性。
initWithCapacity
/ arrayWithCapacity
- 容量将是被调用的容器对象的一个属性,并且相对永久(直到你向它添加超出初始容量的对象)
viewWithTag
- 返回“拥有”指定“标记”属性的视图。
然而,您使用“for”来表示“所需”对象与您用于访问它的“令牌”对象之间更松散的关联。
- objectForKey
/ attributeForValue
- 通常“对象”不拥有密钥。
- documentForWindow
- 窗口由窗口控制器拥有,而不是文档。此外,每个文档可能有多个窗口。
但是对于多重的松散关联 在单个方法调用中具有相同类型的对象,通常使用类似于:
的东西doSomethingForFoo:withThisOtherFoo:havingYetAnotherFoo:
所以这种复杂呼叫的顺序是: