次の方法でNSMutable配列を作成しています。
-(NSArray*)createArrayFromString:(NSString*)str
{
NSArray *arr = [str componentsSeparatedByString:@" "];
NSMutableArray *result = [NSMutableArray arrayWithCapacity:[arr count]];
for(NSString *s in arr){
if([s length]>0){
[result addObject:[s retain]];
}
}
return (NSArray*) result;
}
受信した配列要素をChapterオブジェクトのプロパティresRefsに配置する呼び出しメソッドは次のとおりです。
-(Chapter*)createChapter:(CXMLNode*)node
{
Chapter *chapter = [[Chapter alloc] init];
chapter._id = [[(CXMLElement*)node attributeForName:@"id"] stringValue];
chapter.title = [[(CXMLElement*)node attributeForName:@"title"] stringValue];
chapter.text = [node stringValue];
[chapter.pids addObjectsFromArray:[self createArrayFromString:[[(CXMLElement*)node attributeForName:@"pids"]stringValue]]];
[chapter.resRefs addObjectsFromArray:[self createArrayFromString:[[(CXMLElement*)node attributeForName:@"resRefs"]stringValue]]];
return chapter;
}
ここに質問があります:
保持呼び出しなし
[result addObject:[s retain]];
ViewController(EXC_BAD_ACCESS)からNSString要素にアクセスできません
ここでretainを正しく使用していますか?
編集:
かわった
[[result addObject:s] retain];
の中へ
[result addObject:[s retain]];
2行目は元々私のコードにありました。この質問を投稿するときに、保持を削除して間違った場所に挿入し直しました。それでも、ここで保持することは機能しますが、除外することは機能しません。
編集2:
アナライザー(CMD + SHIFT + B)を検出し、いくつかのメモリリークを検出し、それらを削除すると、EXC_BAD_ACCESSがなくなりました。皆様のご協力に感謝します!