2014-01-24 5 views
-6

이 질문은 우리가 모르는 것을 아는 것과 관련이 있습니다. 나는 왜 사람들이 이것을 사용하지 않는지 연구하고있다. 특정 기술과 관련된 이유는 무엇입니까? 그러므로주의해서 읽고 downvote를 주거나 정답을주십시오. 우리는도트 연산자를 사용한 클래스 메서드 액세스

NSMutableString *string = NSMutableString.string; 

대신

NSMutableString *string = [NSMutableString string]; 

우리는이 방법을 쓸 수있는 방법과 동일 쓸 수

,

NSMutableString *string = [NSMutableString stringWithString:@"test"]; 

업데이트 :

이 질문은 약간 다른 복제본이 아닙니다. 그리고 나는 좋은 프로그래머에게 권장되지 않는 아래의 대답을 받아들입니다. 그러나 그들은 WhyWhat reason, programmers should avoid this?에 대해 설명하지 않았습니다. 누구든지 적절한 링크 또는 문서로 이에 대해 명확한 설명을 줄 수 있습니까?

+1

NSMutableString.string;을 사용하면 안됩니다. '.' 구문은 일반 메소드가 아닌 속성에만 사용해야합니다. 클래스 Objective-C 메시지로 인해 매개 변수가없는 메소드에서도 작동합니다. 그러나 이것은 그런 식으로 사용되는 것이 아닙니다. – rckoenes

+0

@rckoenes 내 친구, "클래스 메서드에이 점을 사용하면 안된다"는 것을 어디에서 알았습니까? 참고 문헌을 보여주십시오. – Mani

+2

이것은 속성이 아닌 메서드입니다.'.' 구문은 속성을위한 것입니다. Apple docs : [Objective-C는 객체의 속성에 액세스하기위한 대체 점 구문을 제공합니다.] (https://[email protected]/ko/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html # // apple_ref/doc/uid/TP40011210-CH5-SW10) – rckoenes

답변

2

NSMutableString.string은 해킹입니다. myString.length[myString length]이 동일한 결과를 산출하는 것과 같은 이유로 "작동"합니다. 그러나 도트 표기법은 실제 속성과 함께 사용되지 않기 때문에 속성에 다른 의미가 있기 때문에 언어 표기법을 남용합니다. 예를 들어, 여러 번 속성에 액세스 할 때 두 번의 호출 사이에서 객체의 상태가 변경되지 않는 한 동일한 결과를 얻을 것으로 예상됩니다. NSMutableString.string은 각 호출에서 새로운 문자열 객체를 생성하기 때문에 "적절한"속성으로 예상되는 의미를 깨고 프로그램의 가독성을 떨어 뜨립니다.

Objective-C에는 점 표기법을 사용하는 인수가있는 메소드를 호출하는 일반적인 방법이 없습니다. 특징은 특성에 매우 특정합니다. 이론적으로는 [MyClass setXyz:abc] 대신 MyClass.xyz = abc을 사용할 수 있지만 해킹 일 수도 있습니다.

질문에 대답하기 위해 Objective-C는 점 표기법으로 [NSMutableString stringWithString:@"test"]에 전화 할 수있는 방법을 제공하지 않습니다.

+0

부분적으로 동의 할 수 있습니다. 이 문장'점 표기법은 실제 속성과 함께 사용되지 않습니다 .' 정확하지 않아야한다고 생각합니까? 어떻게 이럴 수 있니? 링크 나 스펙을 보여줄 수 있습니까? – Mani

+0

업데이트 된 질문보기 .. – Mani

+0

@Mani 속성 구문을 통해 NSMutableString.string을 호출 할 때의 잘못된 점에 대한 간단한 예를 들어 대답을 확장했습니다. – dasblinkenlight

2

이것은 단지 구문 설탕입니다. 메서드는 인수가 없으므로 실제로는 게터처럼 처리됩니다. stringWithString:은 매개 변수가있는 메서드이므로 호출 할 수 없습니다.

일반적으로 메서드에 도트 구문을 사용하는 것은 좋지 않습니다. 혼란 스럽습니다. Objective-C dot notation with class methods?

업데이트

당신이 그것을 피해야한다 기술적 인 이유가 있다고 생각하지 않습니다. 오히려 코드 스타일을 유지하면서 코드를 깨끗하고 일관되게 유지합니다.

+0

필자는 한 가지만 받아들입니다. 모든 프로그래머에게 권장되는 것은 아닙니다. 제 질문은 "왜"입니까? "무엇"을 위해서?. 「인수가 아니고, getter 메소드로서 취급되는 클래스 메소드」를 의미합니까? 이 올바른지? – Mani

+0

업데이트 된 질문보기 .... – Mani

+0

내 친구, 이것이 적절한 코딩 스타일이 아니라는 것을 알고 있습니다. 나는 왜 사람들이 이것을 사용하지 않는지 연구하고있다. 특정 기술과 관련된 이유가 있습니까? 나는 그것을 알아야한다. – Mani