1

私がフォローしている objc チュートリアルでは、次の初期化を使用しています。

NSString* p = [[NSString alloc] initWithString:@"something"];

ただし、同じチュートリアルでは、前の章で、これらのタイプの構成を次のように分割できると述べています。

NSString* p = [NSString alloc];
[p initWithString: @"something"];

ただし、 NSLog を使用してpの値を表示しようとすると、例外が発生します。

main: Uncaught exception NSInternalInconsistencyException, reason: attempt to use uninitialised string

これはおそらく簡単なことですが、これに対する答えが見つからないようです。

4

2 に答える 2

6

変数を init の戻り値に設定する必要があります。

NSString* p = [NSString alloc];
p = [p initWithString: @"something"];
于 2013-01-04T22:31:14.403 に答える
2

これは、 init メソッドに関する NSObjectのマニュアルからのものです。

場合によっては、init メソッドが代替オブジェクトを返すことがあります。したがって、後続のコードでは、alloc または allocWithZone: によって返されるオブジェクトではなく、常に init によって返されるオブジェクトを使用する必要があります。

于 2013-01-04T22:48:56.307 に答える