我知道有很多关于这个话题的问题,但是对我来说没有问题,因为我有点奇怪。
首先,我创建一个静态单例类。并声明NSMutableDictionary的变量
static NSMutableDictionary* mydic
@implementation mySingleton
-(mySingleton*)getInstance
{
static mySingleton *sharedInstance;
@synchronized(self)
{
if(!sharedInstance)
{
sharedInstance = [[mySingleton alloc] init];
mydic = [[NSMutableDictionary alloc] initWithCapacity:1];
}
return sharedInstance;
}
}
-(NSMutableDictionary*)getDictionary
{
return myDic;
}
然后我从另一个类中调用这个NSMutableDictionary,如下所示。
NSMutableDictionary* singletonDictionary = [[mySingleton getInstance] getDictionary];
MyOtherClass* myclass = [singletonDictionary objectForKey:key];// Key is NSString
// Here I can see whole the values I added to myClass for that key
NSArray *checkKey = [singletonDictionary allKeys];
for(int i = 0; i < [singletonDictionary count]; i++)
{
NSLog(@"%@",[checkKey objectAtIndex:i]);// here I can see my key is there
}
[singletonDictionary removeObjectForKey:key];// here it crashes EXC_BAD_ACCESS
我会对这个问题感到疯狂。如果有人有想法,请与我分享。
编辑:
MyOtherClass * myinstance = [[MyOtherClass alloc] init];
// Fill up the instance with the desired variable here
// Forexample
// myinstance.name = [NSString stringWithFormat:@"myInstanceName"];
.
.
.
[[[mySingleton getInstance] getDictionary] setObject:myinstance forKey:key]// key is an NSString*
[myinstance release];
感谢您的帮助。
Omer Faruk KURT
答案 0 :(得分:3)
这么多问题,从哪里开始......?
至少,您的getInstance
方法似乎没有返回任何内容;它可能应该返回mySingleton
。这可以解释您的EXEC_BAD_ACCESS
,因为singletonDictionary
可能是nil
。
您的单例实例化也是错误的 - 您需要检查单例是否已经创建,如果有,则返回它。否则你可以重新分配单身,这是荒谬的。
这里的静态引用设计很差,最好在头文件中子类化并声明成员。
这可能会解决你的问题,但你显然是在深陷,你会遇到更多的麻烦。我认为你需要在文本或在线中找到很好的代码示例并研究它们。如果你很快就会这样做,你就会学习绳索。
答案 1 :(得分:0)
NSMutableDictionary保留添加到字典中的对象。当移除对象时,它们被释放。因此,从字典中删除对象将访问该对象。如果您之前已释放该对象并且已取消分配,则可能会引发异常。如果在从字典中删除之前检查对象的状态,您可能会发现它已经被释放并被释放。