objective-c - 在 iOS 中以编程方式实例化类

标签 objective-c ios xcode class design-patterns

我正在做一个大型 iOS 项目,设计并不像我希望的那样好,但我必须坚持下去。 (生活有时会很糟糕)。

问题是我们有一个基本上可以让您浏览目录的图书馆。您有一个过滤器,您可以在其中指定特定的搜索条件,并且您会看到一个列表,您可以按您感兴趣的项目。当你按下一个项目时,你可以看到它的更详细的描述。

这家公司的工作是向许多拥有不同目录的不同公司销售相同的软件。这个想法是该库具有所有主要功能,并且使用它的项目可能会以某种方式扩展或完全覆盖某些给定的接口(interface)。

举个例子,假设我的图书馆有 2 个管理 2 个 View 的类。它们将是“FilterViewController”和“DetailsViewControllers”。在代码的某些地方,这个类被实例化了。它看起来像这样

Class diagram schema

我的做法是这样的:

ProjectA面

// Here I configure the library
Library.FilterViewClass = ProjectAFilterViewController;
Library.DetailsViewClass = ProjectADetailViewController;

项目B方

Library.FilterViewClass = ProjectBFilterViewController;
Library.DetailsViewClass = nil;

库端

// Did the user configure the library?
if(self.FilterViewClass == nil){
    // I alloc the default ViewController
    myFilterViewController = [[FilterViewController alloc] init]; 
}else{
    // Here I would like to alloc the custom ViewController
    myFilterViewController = [[Library.FilterViewClass alloc] init]; // DaProblem!
}

该方法的问题是我实际上不知道是否可以通过编程方式实例化对象。或者至少我不知道怎么做。也许我使用了错误的方法,我们将不胜感激。提前发送!

最佳答案

要从字符串中获取类,您可以使用此函数

Class cl = NSClassFromString(@"MyClass");

要获取现有变量的类,只需调用 class 方法即可。

Class cl = [obj class]; // assuming obj1 is MyClass

现在你可以创建MyClass的实例了

MyClass *myClass = (MyClass*)[[cl alloc] init];
...
[myClass release];

关于objective-c - 在 iOS 中以编程方式实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8259896/

相关文章:

objective-c - 在 OS X 上读取登录用户的域

iphone - 视网膜显示屏 iphone 的图像

ios - 根据另一个配置数组对数组进行排序

objective-c - NSTableView 滚动不起作用

objective-c - Objective-C 中有类似 Java 枚举的东西吗?

ios - 用 map 实现customView的正确方法

ios - CALayer mask - 合并两层

ios - 重复忙圈动画

iphone - 更改 Facebook "Post to wall"页面 iOS 中的图像

iphone - 密码存储在内存中