char *
で見せたいUITextField
私が試したこと:
char *data;
char *name=data+6;
txtName.text=[[NSString alloc] initWithCString:name encoding:NSUTF8StringEncoding];
しかし、私は正しい値を取得していません。
char *
で見せたいUITextField
私が試したこと:
char *data;
char *name=data+6;
txtName.text=[[NSString alloc] initWithCString:name encoding:NSUTF8StringEncoding];
しかし、私は正しい値を取得していません。
NSString
からを作成するにはconst char *
、次のメソッドを使用します。
autorelease
d オブジェクトを返します:/**
* Should be wrapped in `@autoreleasepool {...}`,
* somewhere not far in call-stack
* (as closer it's, the lower our memory usage).
*/
NSString *stringFromChar(const char *input) {
return [NSString stringWithUTF8String: input];
}
return
オブジェクト (おそらく) になるたびに、Swift
最も近いブロックに登録する必要があります ( owner -rulesに従って、メモリ リークを防ぐために method を@autoreleasepool
呼び出すことによって) が、自動的に登録されます。autorelease
ARC
ただし、無効にしても、次のように手動でARC
呼び出す必要はありません。autorelease
return [[NSString stringWithUTF8String: name] autorelease];
通常、便利なファクトリ メソッド ( など
stringWithUTF8String:
) は、メソッドを既に呼び出していますautorelease
(または、ARC
無効になっている場合は呼び出す必要があります)。これは、クラスが単にインスタンスを所有することを意図していないためです。
retain
ed オブジェクトを作成します。NSString *result = [[NSString alloc] initWithUTF8String: name];
// ... Do something with resulted object.
// NOTE: calling below is not required
// (If ARC enabled, and should cause compile error).
[result release];
違いについて2021年を更新します。
ARC
有効にすると、これら 2 つのメソッドは同等になります (つまり、メソッドをARC
自動呼び出しautorelease
します。常に Nearest に登録します@autoreleasepool
)。
参照。
正しい値が得られない場合は、データに問題があります。いくつかの呼び出しを追加しNSLog
て、文字列の内容を確認します。
あなたは何を期待していますか?初期化されていない char* があります。次に、ポインターに 6 を追加しますが、これは既に未定義の動作です。次に、古いゴミを指しているポインターを NSString* に変えようとします (そして、それがどこを指しているのかわかりません)。これから良いことは何も生まれません。
ASCII または UTF-8 エンコーディングを使用して、実際の実際の C 文字列を指す char* を定義します。次に、次のように NSString を作成します。
char* cstring = "Try harder";
NSString* objcstring = @(cstring);
使用できます[NSString stringWithUTF8String: data]
。