我试过用这两个:
NSClassFromString and objc_getclass
Run Code Online (Sandbox Code Playgroud)
返回一个类,所以我可以在运行时创建它,但是对于某些类,两个函数都返回nil,例如"TestClass".请注意,NSClassFromString适用于99%的类.
如果我加
[TestClass class];
Run Code Online (Sandbox Code Playgroud)
在我调用NSStringFromClass或objc_getclass之前,它可以工作.如果我尝试使用类引用创建类,即:
[TestClass alloc];
Run Code Online (Sandbox Code Playgroud)
它也有效.那么如何强制类在运行时加载,以便NSClassFromString或objc_getclass不会返回nil?
我遇到了同样的问题.在我的情况下,我有使用的查找类的代码
Class aClass = objc_getClass("Foo");
Run Code Online (Sandbox Code Playgroud)
当Foo类与我的AppDelegate在同一个项目包中时,哪个有效.
作为重构代码的一部分,我将Foo类和关联的模型类从AppDelegate项目中移动到一个更容易测试和重用的公共静态lib项目中.
当我将Foo类移动到libFooBar时,objc_getClass("Foo")现在返回nil而不是Foo类.
为了解决这个问题,我调用了我感兴趣的类,以便libFooBar中的类在Objective-C运行时中注册.我是这样做的:
Foo* foo = [[Foo alloc] init];
[foo release];
Class aClass = objc_getClass("Foo");
Run Code Online (Sandbox Code Playgroud)
现在objc_getClass("Foo")再次返回Foo类而不是nil.
我只能假设静态库类没有注册,直到调用静态库中的一个类.
| 归档时间: |
|
| 查看次数: |
9048 次 |
| 最近记录: |