2016-04-06 15 views
1

NSStringを初期化しようとしています。私はinitWithString:を試しましたが、NSStringNSPlaceholderStringになるため無効になります。私はUTF8stringに切り替えましたが、ヌル値を返します。NSStringの結果がNULLになる

以下のコード:

- (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としてそのオブジェクトを使い続けることができます。

関連する問題