次のシナリオでメモリ リークが発生しました。30 秒ごとにデータを読み取り、SBJSONParser を使用してそれを辞書に変換し、通知を追加してから、データを使用してテーブルビューにバインドします。
// Read data and send notification
-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString *content = [[NSString alloc] initWithData:[data subDataWithRange:NSMakeRange(0, [data length] - 2)] encoding: NSUTF8StringEncoding];
// Line where leaks appear
NSMutableDictionary* dict = [[NSMutableDictionary alloc] initWithDictionary:[content JSONValue]];
[content release];
// Post notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"BindData" object:nil userInfo:dict];
[dict release];
}
CustomViewController には、オブザーバーがあります。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bindData) name:@"BindData" object:nil];
および bindData メソッド:
-(void)bindData:(NSNotification*)notification
{
NSAutoreleasePool* pool = [[NSAutoReleasePool alloc] init];
NSMutableArray* customers = [notification.userInfo objectForKey:@"Customers"];
for (NSDictionary* customer in customers)
{
Company* company = [[Company alloc] init];
company.name = [customer objectForKey:@"CompanyName"];
NSLog(@"Company name = %@", company.name);
[company release];
}
[pool drain];
}
問題は、その辞書から company.name = something を設定すると、次の行でメモリ リークが発生することです。30秒ごとに読んでいるので、増え続けています。
私はあなたが与えることができる任意の助けに感謝します. ありがとう。