我正在通过以下方式创建一个 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 元素
我在这里正确使用保留吗?
编辑:
改变了
[[result addObject:s] retain];
进入
[result addObject:[s retain]];
第二行最初在我的代码中。发布此问题时,删除了保留并将其插入错误的位置。尽管如此,在此处保留保留有效,而将其保留则无效。
编辑2:
发现分析器(CMD+SHIFT+B),发现几个内存泄漏,删除它们,EXC_BAD_ACCESS 消失了。感谢大家的帮助!