我正在开发一个由多个人开发的许多区域的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.h
和MyViewController.m
一起MyViewControllerStoryboard.storyboard
。您可以创建MyViewController+FactoryMethods.h
和MyViewController+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文件与工厂方法保持干净。而且方法非常灵活,因为团队中的任何人都可以使用自定义工厂方法轻松扩展类别。另外,每个人都应该迅速习惯于寻找控制器实例化的工厂方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句