2016-04-06 90 views
1

我想初始化一個NSString。我嘗試了initWithString:,但這變得無效,因爲NSString變成了NSPlaceholderString。我切換到UTF8string,但它返回一個空值。下面創建NSString結果爲空

代碼:

- (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

你爲什麼以這樣一種奇怪的方式做這件事?你爲什麼不簡單地用'NSString * s = @「AAA」替換上述所有內容;'? – rmaddy

+1

'NSPlaceholderString'有什麼問題? – Sulthan

+0

這不是用這種做法創建字符串 –

回答

0

NSString的是一類集羣具有多個私有子類。 NSPlaceholderString是NSString的一個子類,因此您可以繼續使用該對象作爲其他NSString。