gpt4 book ai didi

ios - 从 plist 中检索后无法释放对象

转载 作者:行者123 更新时间:2023-11-28 23:19:06 26 4
gpt4 key购买 nike

我仍然堆放着一个简单的 objC 代码,它从 plist 中检索一些数据。使用它们后我无法释放对象,因为它失败了...

- (void)retrieveFromPlist:(NSString*)Nazov
{
NSLog(@"Objekt: %@",Nazov);

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"working.plist"];
////Zober vsetky ulozene

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
NSMutableDictionary *subDict = [[NSMutableDictionary alloc] init];
subDict = [dict objectForKey:Nazov];

NSString *hudbaR;
float hudbaL;
NSString *zvukR;
float zvukL;


hudbaL = [[subDict objectForKey:@"musicLevel"] floatValue];
hudbaR = [subDict objectForKey:@"musicRow"];
zvukL = [[subDict objectForKey:@"soundLevel"] floatValue];
zvukR = [subDict objectForKey:@"soundRow"];

NSLog(@"Musical level: %f, musical roww:%@ , zuk level: %f, zuk row: %@", hudbaL,hudbaR ,zvukL ,zvukR );



if (hudbaR) {
[musicController setBackgroundSoundVolume:zvukL];
[musicController setBackgroundMusicVolume:hudbaL];

MusicsliderCtl.value = hudbaL;
sliderCtl.value = zvukL;


[musicController playMusicWithKey:hudbaR timesToRepeat:0];
[musicController playSoundWithKey:zvukR timesToRepeat:0];

}

//[dict release];
//[subDict release];
}

最佳答案

NSMutableDictionary *subDict = [[NSMutableDictionary alloc] init];
subDict = [dict objectForKey:Nazov];

第二条语句覆盖了已经分配的 subDict。这会导致内存泄漏。然后因为您不拥有 [dict objectForKey:Nazov]-releaseing 它会导致释放错误。

你可以写

NSDictionary* subDict = [dict objectForKey:Nazov];

并且不要 -release 它,因为您不是所有者。 ([dict release] 仍然需要,因为您是 +alloc 的人。)

如果你不改变集合,更喜欢不可变的(NSDictionary)而不是可变的(NSMutableDictionary)。

关于ios - 从 plist 中检索后无法释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3194274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com