我不是Cocoa开发人员,但我一直在尝试为PhoneGap构建一些插件。这个特殊的插件方法是1)崩溃应用程序而不说明为什么或2)抱怨我如何释放/不释放对象。我已经尝试了很多东西,包括使用Enumerator而不是for循环。如果有人能指出我正确的方向,那将是非常棒的。我不介意腿法:
- (void)getPreferences:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options {
NSUInteger argc = [arguments count];
NSString* jsCallback = nil;
if (argc > 0) {
jsCallback = [arguments objectAtIndex:0];
} else {
NSLog(@"Preferences.getPreferences: Missing 1st parameter.");
return;
}
NSDictionary *defaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
NSMutableArray *keys = (NSMutableArray *) [options objectForKey:@"keys"];
NSMutableDictionary *values = [[NSMutableDictionary alloc] init];
NSUInteger ky = [keys count];
for (int i = 0; i < ky; i ++) {
@try {
[values setObject:[defaults objectForKey:[keys objectAtIndex:i]] forKey:[keys objectAtIndex:i]];
}
@catch (NSException * err) {
NSLog(@"Error %@", err);
}
}
[keys release];
NSString* jsString = [[NSString alloc] initWithFormat:@"%@(%@);", jsCallback, [values JSONRepresentation]];
[defaults release];
[values release];
[webView stringByEvaluatingJavaScriptFromString:jsString];
[jsString release];
}
人类版本:
options
包含一个包含单个键“keys”的字典defaults
中存在的每个值,请使用相同的密钥将其复制到values
values
作为JSON发回(当我刚刚传递整个defaults
对象时,这部分工作正常,所以我认为JSON方法正常工作)答案 0 :(得分:2)
在您的代码中,您拥有'对象values
和jsString
(您使用alloc
创建的对象),因此您应该释放它们,而不是其他任何对象。<登记/>
您可以阅读有关内存管理here的更多信息。
这是整个代码吗?另外,你得到了什么错误?
答案 1 :(得分:1)
Nikita是对的,看起来好像是在释放defaults
,这会在自动释放池被释放后导致崩溃。此外,如果我理解您正在尝试正确执行的操作,则可以使用一行代码创建values
字典:
NSDictionary *values = [defaultsDict dictionaryWithValuesForKeys:keys];