9

根据 Apple指南,这似乎令人困惑,例如对于方法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?
4

5 回答 5

5

我实际上认为它比大多数答案所想的要简单得多。我认为它与复杂的编程语言细节关系不大,而与所讨论对象的唯一性有关。

当您说 时viewWithTag:,您是在询问具有该标签UIView任何视图。可能有几个。将UIView返回其中一个。

但是,objectForKey:(对我来说)听起来应该有一个与该键关联的对象(或 nil)。因此,密钥有点存在并绑定(紧密耦合)到单个对象。

编辑:

有一个答案提到了“by”的存在,这进一步暗示了该约定与编程语言的复杂性无关。这只是自然的英语。

NSStringstringByAppendingString:,例如,使用 by,只是因为该函数是用动词附加的。你不能说withAppending,那是糟糕的英语。

于 2012-09-01T10:45:42.887 回答
3

根据我的观察

在设置/获取对象时,您使用WITH

例如用于设置 NSMutableArray 对象

 - (id)initWithCapacity:(NSUInteger)numItems

在设置/获取对象的属性时,您使用 FOR

例如为 NSMutableDictionary 类型的属性设置值

- (void)setValue:(id)value forKey:(NSString *)key

希望这有助于消除您的疑问

于 2012-09-01T10:36:31.527 回答
3

似乎with用于直接属于对象的属性。AUIView有一个tag属性,因此viewWithTag:14可以改写为“查找标签属性为 14 的视图”

当您将对象放入字典中时,与键相关联,该键不一定是对象本身的一部分。objectForKey:@"foo"是一种表示“查找与键 "foo" 链接的对象的方式。

于 2012-09-01T10:40:41.193 回答
0

Apple 指南并未就何时使用或配合使用做出任何此类声明。编码约定的要点是指出参数的类型可能是什么,并编写听起来自然的方法签名。

方法名称中使用 for 或 with 的原因是为了识别方法的第一个参数的类型或用途,这有助于它更好地阅读。

Apple 本身使用了几种约定,但这是基本目的,没有具体的对错,只是尝试用 for 或 with 来标识方法名称中方法的第一个参数。

至于 Apple 约定 - get(whatever) 甚至不是实际约定的一部分,所以你可以问我什么时候使用 get 或不使用。

阅读此http://cocoadevcentral.com/articles/000082.php

也不要忘记(通过)NSURL urlByAppendingPathComponent 等 - 感受一下,你不会出错

于 2012-09-01T11:44:57.647 回答
0

每当参数被拥有或被拥有时,您都使用“with”,或者将成为“with”字左侧的对象的相对永久属性。

  • initWithCapacity/ arrayWithCapacity- 容量将是被调用的容器对象的一个​​属性,并且将是相对永久的(直到您向其中添加超出初始容量的对象)

  • viewWithTag– 返回一个“具有”指定“标签”属性的视图。

而您使用“for”来表示“所需”对象和用于获取它的“令牌”对象之间的松散关联。- objectForKey/ attributeForValue- 通常“对象”不拥有密钥。- documentForWindow- 窗口由窗口控制器拥有,而不是文档。此外,每个文档可能有多个窗口。

但是对于单个方法调用中相同类型的多个对象的松散关联,习惯上你使用类似的东西:

doSomethingForFoo:withThisOtherFoo:havingYetAnotherFoo:

所以这种复杂调用的顺序是:

  1. 为了
于 2012-09-02T23:54:21.557 回答