2010-11-28 14 views
0

私はカスタムLocationDetailオブジェクトで満たすNSMutableArray * cityDataを持っています。 cityDataはviewDidLoadで作成され、deallocで解放されます。コード内 どこか、ユーザーアクションに基づいて、私はLocationDetailを移入し、cityData配列に追加します。NSStringでのメモリ管理の問題

LocationDetail* d = [[LocationDetail alloc] init]; 
    d.city = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 1)]; 
    d.tz = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 3)]; 
    d.country = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 2)]; 
    d._id = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 0)]; 

    [cityData addObject:d]; 
    [d release]; 

私はビューコントローラを終了し、それを削除しています、リークユーティリティは、私は、コードのリークを持っていると言います上記の[NSString stringWithFormat]を使用して、4行すべてのNSCFStringの上に追加します。

私はsqlite3のものを削除しようとしたと同じ結果と

d._id = [NSString stringWithFormat:@"%s", "a string"] 

のようなものへの呼び出しを簡素化。しかし、NSStringのstringWithFormatを次のように置き換えた場合、

d._id = @"a string"; 

漏れがなくなります。なぜ私はstringWithFormatを使用するとリークがあるのだろうと思っていますが、@ "何か"を使っているのではないのです。私が間違っていることが明らかなことはありますか?

ありがとうございます!

+0

LocationDetailの各 '@プロパティ'( 'city'、' tz'、 'country'と' _id')をどのように定義したかを示します –

+0

LocationDetailのプロパティはすべてNSStrings *であり、@property非構造体、保持)NSString * _id; – MirekE

+0

@interface LocationDetail:NSObject { NSString * city; NSString * tz; NSString *国; \t NSString * _id; } @property(nonatomic、retain)NSString * city; @property(非構造、保持)NSString * tz; @property(nonatomic、retain)NSString *国; @property(nonatomic、retain)NSString * _id; @end – MirekE

答えて

1

プロパティが自動的に解放されていない、あなた自身で

- (void)dealloc 

は、例えばThe Objective-C Programming Language: Declared Propertiesを参照してくださいことを行う必要があります。


編集:

それは例がAdvanced Memory Management Programming Guideに移動したようです。

+0

はい、私はそれを逃しました。ありがとう! – MirekE

+0

残念ながら、そのリンクは現在破損しています。 – Ant

+0

通知のおかげで、私は最新のリンクで投稿を更新しました。 –