2011-12-29 7 views
5

szukałem sposobu debugowania JavaScript w UIWebView i natknąłem niektórych artykułów o _enableRemoteInspector specjalnieiOS 5 - Kompilacja prywatnych API do debugowania - specjalnie _enableRemoteInspector

http://atnan.com/blog/2011/11/17/enabling-remote-debugging-via-private-apis-in-mobile-safari/

nie mogłem się przykładowy kod do kompilować jednak. Wciąż pojawia się błąd "Brak znanej metody klasy dla selecktora". Nie tylko ostrzeżenie.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    //Works 
    [NSClassFromString(@"WebView") performSelector:@selector(_enableRemoteInspector)]; 

    //Won't compile 
    //[NSClassFromString(@"WebView") _enableRemoteInspector]; 
} 

Więc próbowałem wykonaćSelector i działa, a debugger działa zgodnie z opisem.

Ale jak go skompilować, nie uciekając się do wykonania selektora?

Używam Xcode 4.2.1, a mój projekt korzysta z zestawu SDK iOS5.

Odpowiedz

7

Jest to spowodowane nowym automatycznym licznikiem odwołań (ARC) w iOS 5. Przykładowy kod, z którym się łączyłeś, zakłada, że ​​używasz ARC jako , a nie.

Jeśli nie używasz ARC, [NSClassFromString(@"WebView") _enableRemoteInspector] po prostu wygeneruje ostrzeżenie "nie znaleziono metody" (ponieważ ta metoda nie została publicznie zadeklarowana).

Jednak z różnych powodów, gdy włączone jest urządzenie ARC, to ostrzeżenie staje się błędem. Jeśli chcesz go skompilować bez użycia performSelector, musisz wyłączyć ARC.

+0

Way ARC od ostrzeżenia staje się błędem? masz jakieś referencje? Chcę poznać podstawowy powód. – iHTCboy