2009-05-23 5 views
8

私は大部分がNSString型のプロパティを持つ非常にストレートなフォワードクラスを持っています。その中で、私は記述方法の簡単な実装を書いた。説明に「自己」を含めると、iPhoneアプリがクラッシュすることがわかりました。たとえば、次のようなものがあります。Objective-Cの記述方法に "self"を含めることはできませんか?

- (NSString *)description 
{ 
    NSString *result; 

    result = [NSString stringWithFormat:@"me: %@\nsomeVar: %@", self, self.someVar]; 

    return result; 
} 

フォーマット文字列selfの最初のパラメータを削除すると、期待通りに機能します。

答えて

30

%pを使用すると、selfのアドレスが表示されます。 %@を使用すると、selfdescriptionが呼び出され、無限再帰が設定されます。

6

あなたは、無限の再帰を設定することが分かります。

descriptionの実装では、selfを渡すと暗黙的に自分自身が呼び出され、それ自体が呼び出されます。

あなたのクラッシュは、おそらくスタックスペースが不足している可能性があります。サイトを考慮したフィット:

12

あなたはそうのように、無限の再帰を避けるために、代わりに自己の[スーパーの説明]を使用することができます。

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"%@: %@", [super description], [self someVar]]; 
} 
関連する問題