我想将其用于对象工厂:给定一个字符串,创建一个类,如果

推荐答案

Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
  [[klass alloc] create];
}

然而,我可以指出,通过上述操作,你打破了多少糟糕的Objective-C规则吗?例如,永远不要对已分配但未初始化的实例调用方法.Xcode静态分析器会给你各种关于内存泄漏的警告.

更好的 Select 是:

[[[klass alloc] init] create];

但你似乎暗示你不想调用init.

可以考虑一个类方法:[klass create],它将返回一个非klass的实例.那你就先查[klass respondsToSelector:@selector(create)]再打电话.

Objective-c相关问答推荐

在 iOS 7 上,如果最终包含在选项卡栏控制器中,则使用工具栏推送控制器会留下不可用空间的间隙

警告:格式字符串不是字符串文字(可能不安全)

如何检测 iPhone 5c 的 colored颜色 ?

XCTAssertEqual 错误:(3)不等于(3)

在 10.9 上以编程方式启用对辅助设备的访问

为什么 UICollectionView 的 UICollectionViewCell 没有在用户时突出显示?

UILabel:你如何设置字体大小?

在 viewDidAppear 之前无法正确设置框架

从 NSError 返回 NSString

与 iOS 6.0 原生 Facebook 集成共享:通过我的应用名称发布?

将子视图添加到 UIButton

StoryBoard 助理编辑器停止显示相关文件

当表格重新出现时,UITableView 不会自动取消 Select 选定的行

如何在 Objective-C (iOS) 中判断 NaN 值

通过索引访问 NSMutableDictionary 中的对象

UICollectionView 更新单个单元格

Objective-C 中的 NSString indexOf

Xcode 7 警告:目标文件是为比链接更新的 iOS 版本构建的

iOS 10 中的错误:无法从 https://mesu.apple.com/assets/ 复制assets资源信息以获取assets资源类型

为整个 iPhone / iPad 应用程序设置背景图像