2014-02-18 3 views
0

구현없이 NSObject 하위 클래스를 만들고 "WebView"라고 명명했습니다. 내 코드에서 NSClassFromString을 사용하여이 클래스의 객체를 동적으로 인스턴스화 할 수 있어야합니다.iOS 용 WebView 금지 클래스 이름은 무엇입니까?

사소한 작업처럼 솔기가 있지만이 특정 클래스 이름 "WebView"에 문제가 있습니다. NSClassFromString() 같은 이음새가 특정 클래스 이름으로는 실패하지만 lldb를 사용하면 class1과 class2 설명을 모두 인쇄 할 수 있으며 둘 다 "WebView"라고 인쇄 할 수 있습니다.

다른 사용자에게 동일한 문제가 발생합니까? 인스턴스 변수 등을위한 금지 된 클래스 이름 목록이 있습니까?

@interface WebView : NSObject 
@end 

@implementation WebView 
@end 

@implementation ViewController 
- viewDidLoad { 
    Class class1 = [WebView class]; 
    Class class2 = NSClassFromString(NSStringFromClass(class1)); 

    NSAssert(class1 == class2, @"Classes not equal"); // FAIL 
} 
@end 

그리고 또 다른 예 :

[class1 new]; // OK 
[class2 new]; // EXC_BAD_ACCESS (code=2, address=0x0) 
+6

WebView는 내부적으로 UIWebView에서 사용되는 개인 클래스이므로 문제가 발생할 수 있습니다. – Vladimir

답변

3

enter image description here

나는 웹보기를 할당 할 때. 이미지에서 볼 수 있듯이 사과의 내부 구조를 조사합니다.

0

당신은 항상이 같은 충돌을 방지하기 위해 수업을위한 3 편지 접두어를 사용한다. Apple은 자체적으로 두 개의 문자 접두어를 모두 예약합니다.

Xcode에서 프로젝트를 만들 때 어떤 접두사를 사용할지 묻고 심지어이 접두사를 사용하여 새로운 클래스를 만듭니다.

+0

이것은 완전히 사실이 아닙니다. Apple은 세 글자 접두어를 사용하도록 권장하지만 두 글자 (예 : NS, UI, AB, CA, CI)로만 몇 개의 문자를 예약합니다. – tilo

+0

OSles의 향후 버전에서 새로운 접두어를 사용할 수 있기 때문에 두 글자 접두사를 모두 확보 할 수 있습니다. 목록에있는 것들은 문서에 포함 된 예제 일뿐입니다. https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html 물론 그들은 다른 사람들을 사용합니다. CM -> Core Motion, CG -> Core Graphics, SK -> Sprite Kit (iOS 7에서 방금 추가 한 새로운 접두어의 예). –

0

WebView는 인스턴스 apple sdk 클래스입니다. 내가 사용했을 때 UIWebView 나는 webView 클래스 조상 인 방법을 보았다 UIWebView. 따라서 WebView라는 이름의 클래스를 사용하지 마십시오.이 이름은 사과를 사용합니다.