2012-09-01 2 views
9

Apple에 따르면 guideline은 혼란 스럽습니다. 방법 viewWithTag 자바에서목표 C 규칙 : 사용시기 및 사용시기

, 나는 방법이

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? 
+1

좋은 질문, btw. 이 질문 중 하나는 대답이 필요했지만 결코 묻기를 생각하지 않았습니다. 그 문제에 관해선 나 자신에게 묻지 마라. – Mazyod

+0

애플 프로그래머 Fred는 항상 "for"를 사용했고 Apple 프로그래머 Jim은 항상 "with"를 사용했습니다. –

답변

3

은/개체를 받고, 당신은 함께 를 사용합니다.

설정하는 동안 NSMutableArray를 객체의 설정을 위해

- (id)initWithCapacity:(NSUInteger)numItems 

은/개체의 속성을 가져 오는, 당신은에 대한 를 사용합니다. 유형의 속성에 대한

e.g.For 설정 값

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

희망이 with 것 같다

+0

불행하게도,'NSDictionary'의 메소드는'objectForKey :''setObject : forKey :'입니다. 이것은 Objective-C 속성 근처에 없습니다. – Mazyod

3

직접 객체에 속하는 속성에 사용되는 당신의 의심을 삭제하는 데 도움이 NSMutableDictionary. UIViewtag 속성을 가지므로 viewWithTag:14"tag 속성이 14 인보기 찾기"으로 바꿀 수 있습니다.

사전에 키와 연결된 개체를 넣을 때이 키는 반드시 개체 자체의 일부는 아닙니다. objectForKey:@"foo"는 foo는 ""키에 연결되어있어 개체를 찾습니다 "말을하는 방법입니다.

+0

+1 이것이 내가 설명하는 방법입니다. 'with '는 전달 된 값이 대상 객체의 속성임을 의미하는 반면'for '는 전달 된 값이 대상 객체와 환경 적으로 연관되어 있음을 의미합니다. –

5

실제로. 나는 그것이 복잡한 프로그래밍 언어를 할 적은 있다고 생각은 대부분의 대답이 생각하는 것보다 훨씬 간단하다고 생각 당신이 viewWithTag:을 말할 때 구체적인 및 해당 개체의 고유성와 관련이 있습니다.

하면 해당 태그가있는 UIView 어떤에 대한보기를 요구하고있다. 여러 가지가있을 수 있습니다. UIView 하나를 반환합니다 안에.

Ho wever, objectForKey: (저에게) 그 열쇠와 관련된 하나의 객체 (또는 nil)가 있어야하는 것처럼 들립니다. 그래서, 열쇠가 존재하고 하나의 객체에 묶여 있습니다.

편집 : 더 규칙은 프로그래밍 언어의 복잡성과 아무 상관이 얼마나 의미 "에 의해"의 존재를 언급 답이있다

. 그것은 단지 자연스러운 영어입니다.

NSStringstringByAppendingString:, 예를 들면, 기능을 추가 상기 동사 작성 만하기 때문에 사용에 의해. withAppending이라고 말할 수는 없습니다. 그건 나쁜 영어입니다.

+1

방금이 토론에 "복수형"이라는 단어를 제공하고 싶었습니다.그것은 처음에 내 마음에 온 한 단어이고,이 대답 (+1)에서 설명 된 개념입니다. "by"까지는 행동을 의미하고, 다른 것은 단순히 선택을 의미합니다. –

+0

새로운 편집은 사람들에게 문법과 비 기술적 인 것들을 가르칩니다. [기타] (http://english.stackexchange.com/?as=1) 포럼을 선택하십시오. –

0

Apple 지침에 따라 또는을 (를) 사용시기에 대한 그러한 주장을하지 않습니다. 코딩 규칙의 핵심은 인수의 유형을 표시하고 자연스럽게 들리는 메소드 서명을 작성하는 것입니다.

메서드 이름에 for 또는 with가 사용 된 이유는 메서드의 첫 번째 매개 변수의 형식이나 용도를 식별하여 메서드를 더 잘 읽는 데 도움이됩니다.

Apple 자체는 여러 가지 규칙을 사용하지만 기본 목적이므로 구체적인 또는 옳은 것은 없습니다. for 또는 with 중 하나를 사용하여 메서드 이름의 메서드의 첫 번째 매개 변수를 식별하기 만하면됩니다.

그리고 Apple 협약과 관련하여 - 실제 협약의 일부가 아니기 때문에 언제 get을 사용할지 묻습니다.

읽기 http://cocoadevcentral.com/articles/000082.php

또한 (가) 잊지 말아이 NSURL urlByAppendingPathComponent 등 - 그것에 대한 느낌을 얻을 당신이 늘 갈 잘못

당신은 "함께"를 사용
0

매개 변수가 소유하거나 소유 할 때마다, 또는 "with"단어의 왼쪽에있는 객체에 의해 상대적으로 영구 속성이됩니다.

  • initWithCapacity/arrayWithCapacity - (초기 용량 이상으로 그 개체를 추가 할 때까지) 용량이

  • viewWithTag 호출되는 컨테이너 개체의 속성되며 상대적으로 영구적 인 것입니다 - 뷰를 반환 지정된 "태그"속성을 "갖는".

반면에 "for"는 "desired"개체와 도착하는 데 사용하는 "token"개체 간의 느슨한 연결을 나타냅니다. - objectForKey/attributeForValue - 일반적으로 '개체'는 키를 소유하지 않습니다. - documentForWindow - 창은 창 컨트롤러가 소유하며 문서는 소유하지 않습니다. 또한 각 문서에 대해 하나 이상의 창이있을 수 있습니다. 그래서 복잡한 호출 순서가

doSomethingForFoo:withThisOtherFoo:havingYetAnotherFoo: 

:

    그러나 하나의 메소드 호출 내에서 동일한 유형의 개체를 여러의 느슨한 협회에 대한

    , 당신은 같은 것을 사용하는 것이 관례
  1. 위한
을 갖는
관련 문제