2010-02-20 6 views
4

Objective-C 카테고리는 매우 유용하지만이 기능에는 몇 가지 문제가 있습니다. 이것들은 기본적으로 내가 아는 두 가지 형태로 나온다 :Objective-C 카테고리는 얼마나 안전합니까?

  • 동일한 편의 방법을 추가하려는 두 가지 카테고리. 이 경우 어느 것이 사용되는지는 정의되지 않았다. 너무 많은 메소드를 추가하거나 특히 일반적인 메소드 이름을 사용하지 않도록 조심한다면 첫 번째 문제는 거의 문제가 될 수 없습니다.
  • 카테고리와 충돌하는 작성자가 클래스에 추가하는 새로운 메소드입니다. 이 경우 카테고리가 클래스 메소드보다 우선합니다. 수업이 제 통제하에 있지 않을 수도 있으므로, 저는이 문제에 대해 더 걱정하고 있습니다.

백 포트 변경 사항은 상당히 안전해야하지만 인터페이스를 구현하거나 편리한 방법을 추가하는 것이 더 위험한 것처럼 보입니다. 나는 코코아가 편리한 메소드를 위해 그것을 사용하는 것 같다는 것을 알지만, 다시 한번 기본 클래스가 제어 할 수있다. 아마도 클래스를 사용하여 종속성을 줄이는 것일 수도 있습니다. 따라서 String 클래스는 Cocoa에서 작업하기위한 편리한 메소드를 가질 수 있지만 Cocoa를 사용하지 않으면 가져 오지 않습니다.

카테고리/안전 유지를위한 지침은 무엇입니까?

답변

6

일반적으로 제어 할 수없는 코드 (예 : Foundation)를 확장 할 때 메소드 이름에 접두사 또는 접미사를 사용하여 이러한 종류의 충돌을 피하는 것이 일반적입니다. Peter Hosey's perform on main thread category에서

예 :

@interface NSObject (PRHPerformOnMainThread) 
- (id) performOnMainThread_PRH; 
@end 

그것은 가장 아름다운 해결책이 아니다, 그러나 당신이 취약성에 대한 걱정이 있다면 그것은 좋은 생각이다.

+1

대부분의 문제가 해결된다고 생각합니다. – Casebash

4

유용한 정보는 Google Objective-C Style Guide이며 충돌을 피하는 데 도움이되는 규칙이 포함되어 있습니다.

+0

몇 차례 언급했지만 아직 읽지 않았습니다. 나는해야한다고 생각해. – Casebash

관련 문제