获得EXC_BAD_ACCESS试图ADDOBJECT到NSMutableArray的
问题描述:
时,我有以下代码:获得EXC_BAD_ACCESS试图ADDOBJECT到NSMutableArray的
NSInteger phoneCount = ABMultiValueGetCount(phones);
NSMutableArray *phoneKeys = [[[NSMutableArray alloc] init] autorelease];
NSMutableArray *phoneKeyValues = [[[NSMutableArray alloc] init] autorelease];
for(CFIndex i=0; i < phoneCount; i++) {
//NSString *label = [(NSString *)ABMultiValueCopyLabelAtIndex(phones, i) autorelease];
NSString *phone = [(NSString *)ABMultiValueCopyValueAtIndex(phones, i) autorelease];
NSString *phoneIndex = [[[NSNumber alloc] initWithInt:ABMultiValueGetIdentifierAtIndex (phones, i)] autorelease];
[phoneKeys addObject:phoneIndex]; // it breaks on this line
}
NSLog(@"Count: %@ %@", [phoneKeys count], [phoneKeyValues count]);
任何想法,为什么我会得到EXC_BAD_ACCESS,当我尝试做[phoneKeys ADDOBJECT:phoneIndex]?
在此先感谢
答
NSLog(@"Count: %@ %@", [phoneKeys count], [phoneKeyValues count]);
-count
方法返回一个NSUInteger,它只是一个unsigned int
。但是%@
只能打印Objective-C对象,而不是unsigned int
。这导致异常。
要打印unsigned int
,您需要使用%u
而不是%@
。
NSLog(@"Count: %u %u", [phoneKeys count], [phoneKeyValues count]);
+0
谢谢!这帮助很大 – john 2010-08-29 18:31:22
答
每当这个发生在我身上,即它打破了正确的内存管理代码,并根据内存管理准则,但剧照崩溃,其结果是由于过度释放somwehere其他,我会做的代码进行全面审查寻找泄漏,我推荐你使用泄漏工具:
在X-代码去运行>与性能工具运行“泄漏
入住此技术问答&一太:http://developer.apple.com/mac/library/qa/qa2004/qa1367.html
您是否尝试过删除NSLog行? – kennytm 2010-08-29 18:13:36
嗯你是对的。这是否意味着phoneKeys正在发布太快? – john 2010-08-29 18:16:54
你的意思是它在删除NSLog后工作? – kennytm 2010-08-29 18:20:34