Objective c 在NSMutableDictionary中存储未注册的类
在我的代码中,我动态创建类,并尝试将它们存储在NSMutableDictionary中:Objective c 在NSMutableDictionary中存储未注册的类,objective-c,runtime,nsdictionary,nsmutabledictionary,Objective C,Runtime,Nsdictionary,Nsmutabledictionary,在我的代码中,我动态创建类,并尝试将它们存储在NSMutableDictionary中: NSMutableDictionary* classDict = [ [ NSMutableDictionary alloc ] init ]; ...start loop Class customClass = objc_allocateClassPair( [ TestClass class ], className, 0 ); [ classDict setObject:customClas
NSMutableDictionary* classDict = [ [ NSMutableDictionary alloc ] init ];
...start loop
Class customClass = objc_allocateClassPair( [ TestClass class ], className, 0 );
[ classDict setObject:customClass forKey:name ]
...end loop
...add methods to certain classes within the dict
...register classes with objective c
当我运行代码时,当它试图将类添加到字典中时,会抛出一个“EXC_BAD_ACCESS”。有没有办法绕过这个问题?也就是说,有没有办法将未注册的类添加到NSMutableDictionary?另一种解决方案是使用std:map数据结构
提前感谢。要回答实际问题:向字典添加
类
对象很简单:
[dict setObject:[TestClass class] forKey:@"key"];
我经常这样做,没有任何问题。但是,您似乎想要添加一个未完成的类对象。文件规定:
构建完类后,调用objc_registerClassPair。这个
新类现在可以使用了
那么,您的类对象可能还没有“准备好使用”吗
在一些测试后更新:
您需要调用objc\u registerClassPair
,以便将Class
用作实际对象。在此时间之前调用retain
将导致EXC\u BAD\u访问
如果要在循环中创建类,并在以后的阶段中注册它们,只需使用以下命令框住指针:
[classDict setObject:[NSValue valueWithPointer:customClass] forKey:name];
只需使用classcustomclass=[value pointerValue]将其取消装箱代码>。注册后,您当然可以像往常一样使用类
对象。回答实际问题:将类
对象添加到词典很简单:
[dict setObject:[TestClass class] forKey:@"key"];
我经常这样做,没有任何问题。但是,您似乎想要添加一个未完成的类对象。文件规定:
构建完类后,调用objc_registerClassPair。这个
新类现在可以使用了
那么,您的类对象可能还没有“准备好使用”吗
在一些测试后更新:
您需要调用objc\u registerClassPair
,以便将Class
用作实际对象。在此时间之前调用retain
将导致EXC\u BAD\u访问
如果要在循环中创建类,并在以后的阶段中注册它们,只需使用以下命令框住指针:
[classDict setObject:[NSValue valueWithPointer:customClass] forKey:name];
只需使用classcustomclass=[value pointerValue]将其取消装箱代码>。注册后,您当然可以像往常一样使用类对象。是的,我想我应该用不同的措辞来回答我的问题。正如您所说,添加一个类很容易。我想做的是将一个未注册的类添加到数据结构中——如果它没有“准备好使用”这一事实导致了问题,那么我看不到很多选项。您是否测试了在obj_registerClassPair
之后将其添加到字典中是否会导致相同的崩溃?是的,代码工作正常。然而,我需要在dict中的类注册之前向它们添加方法。显然,在调用objc_registerClassPair之后,您可以动态地向类添加方法。我的印象是,这个类一旦注册就变得不可更改了。这解决了我的问题。:)嗯,你总是可以保存指向未完成对象的指针,请参阅我的更新。是的,我想我应该用不同的措辞来回答我的问题。正如您所说,添加一个类很容易。我想做的是将一个未注册的类添加到数据结构中——如果它没有“准备好使用”这一事实导致了问题,那么我看不到很多选项。您是否测试了在obj_registerClassPair
之后将其添加到字典中是否会导致相同的崩溃?是的,代码工作正常。然而,我需要在dict中的类注册之前向它们添加方法。显然,在调用objc_registerClassPair之后,您可以动态地向类添加方法。我的印象是,这个类一旦注册就变得不可更改了。这解决了我的问题。:)好的,您可以随时保存指向未完成对象的指针,请参阅我的更新。