我正在开发一个由多个人开发的许多区域的ios应用程序。我们想要一个实例化视图控制器的简单,标准的范例(通常来自应用程序的其他区域),例如:

MyViewController *myVC = [[MyViewController alloc] init];


但是,我们希望能够在Storyboard中定义ViewController的功能,其中每个区域可能都有一个或多个Storyboard。我们如何拥有不需要UIViewControllers来了解情节提要的细节的代码?

可以进行以下工作吗? (在MyViewController.m中)

- (instancetype)init
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyViewControllerStoryboard" bundle:nil];
    return [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
}


还是上述情况会导致内存泄漏和/或其他讨厌的副作用?

最佳答案

对于您的视图控制器的每种特殊情况,具有工厂方法的类别怎么样?

例:

您具有MyViewControlle.hMyViewController.m以及MyViewControllerStoryboard.storyboard。您可以创建具有以下内容的MyViewController+FactoryMethods.hMyViewController+FactoryMethods.m文件:

MyViewController + FactoryMethods.h

@interface MyViewController (FactoryMethods)

+ (instancetype)createDefaultViewController();

@end


MyViewController + FactoryMethods.m

#import "MyViewController+FactoryMethods.h"
@implementatiion MyViewController (FactoryMethods)

+ (instancetype)createDefaultViewController() {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyViewControllerStoryboard" bundle:nil];
    return [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
}

@end


用法:

#import "MyViewController+FactoryMethods.h"

@implementation SomeClass

- (void)method {
    MyViewController *mvc = [MyViewController createDefaultViewController];
}

@end


使用这种方法,您可以使MyViewController文件与工厂方法保持干净。而且方法非常灵活,因为团队中的任何人都可以使用自定义工厂方法轻松扩展类别。另外,每个人都应该迅速习惯于寻找控制器实例化的工厂方法。

关于ios - 如何隐藏从 Storyboard 中初始化ViewController的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24784492/

10-14 17:32