2010-05-07 6 views
3

나는 Objective-C를 처음 접했고 애플이 내 앱을 거부하게 만들 수있는 "비공개 API"의 붕괴에 혼란 스럽다. 여기에는 기존 클래스에 메소드를 추가하는 것이 포함됩니까? 예를 들어, stackoverflow에서 UITabBarItem 클래스에 대한이 확장을 사용하여 UITabBars의 탭 표시 줄 아이콘을 다시 칠하는 코드를 발견했습니다. 이것이 "비공개 API"로 간주됩니까? 그렇지 않다면, 무엇을합니까?iPhone 앱에서 비공개 API를 구성하는 요소는 무엇입니까?

@interface UITabBar (ColorExtensions) 
- (void)recolorItemsWithImage:(UIImage *)image shadowColor:(UIColor *)shadowColor shadowOffset:(CGSize)shadowOffset shadowBlur:(CGFloat)shadowBlur; 
@end 
+0

큰 질문입니다. –

답변

2

위의 코드는 클래스를 새로운 방법으로 확장 한 Objective-C category 일 수 있습니다. 이것은 완벽하게 정결합니다. 기존 방법을 범주로 덮어 쓸 수도 있지만 권장하지는 않습니다.

일반적으로 개인 메서드는 종종 앞에 밑줄이 있습니다. UIWebView 내의 개인 구성 요소와 같이 Apple이 대형 UI 개체에 예약하는 개인 클래스도 사용하고 싶지 않습니다. 이 앱을 사용하고 싶지 않거나 앱이 거부 될 것입니다.

프로젝트의 프레임 워크에있는 헤더 파일에 표시된 내용은 모두 "공개"이며 사용할 수 있습니다. 어쨌든 수업에 대한 모든 것을 정말로 알고 싶다면 헤더를 엄지 손가락으로 훑어 보는 것이 좋습니다.

4

아니요, 사용자 코드로 추가 된 카테고리는 '비공개'가 아닙니다. 비공개 API는 문서화되지 않은 Apple의 내부 API입니다. 메서드는 헤더 파일에 없지만 개발자 설명서에없는 경우 비공개입니다. 대략적으로 컴파일러 경고 메시지가 표시되지 않으면 비공개 API를 사용하지 않는 것입니다.

관련 문제