2016-04-06 13 views
1

Ich versuche, eine NSString zu initialisieren. Ich versuchte initWithString:, aber das wird ungültig, weil die NSString eine NSPlaceholderString wird. Ich wechselte zu UTF8string, aber es gibt einen Nullwert zurück.Erstellen von NSString-Ergebnissen in Null

Code unten:

- (void) test:(NSString*)thing { 
    id (*p_objc_msgSend)(id p, SEL sel, ...); 
    id (*p_objc_getClass)(const char *s); 
    Class class; 

    p_objc_getClass = objc_getClass; 
    p_objc_msgSend = objc_msgSend; 

    NSString *s; 

    class = (*p_objc_getClass)("NSString"); 
    //SEL init = @selector(initWithString:); 
    s = (*p_objc_msgSend)(class, @selector(alloc)); 
    s = (*p_objc_msgSend)(s, @selector(initWithUTF8String:), "AAA"); 

    NSLog(@"Value of %@", s); 
} 
+3

Warum machst du das so bizarr? Warum ersetzen Sie nicht einfach alle oben genannten mit 'NSString * s = @" AAA ";'? – rmaddy

+1

Was ist falsch mit 'NSPlaceholderString'? – Sulthan

+0

Es ist nicht die Zeichenfolge mit dieser Praxis erstellen –

Antwort

0

NSString ist ein Klasse-Cluster mit mehreren privaten Unterklassen. NSPlaceholderString ist eine Unterklasse von NSString, sodass Sie dieses Objekt weiterhin als jeden anderen NSString verwenden können.