Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 最小化UIVIewController实例的创建_Ios_Uiviewcontroller - Fatal编程技术网

Ios 最小化UIVIewController实例的创建

Ios 最小化UIVIewController实例的创建,ios,uiviewcontroller,Ios,Uiviewcontroller,我想这是一个初学者的问题,所以感谢您的耐心: 在viewControllerA中,我从viewControllerB调用了很多方法 目前我正在使用 viewcontrollerB * vcB= [[viewcontrollerB alloc] init]; [vcB doSomething]; 我在我的ViewControllerA中一遍又一遍地这样做,感觉很愚蠢 那么,什么是最好的方法呢 我可以将viewControllerB设置为viewControllerA的属性吗? 我应该使用委托方法

我想这是一个初学者的问题,所以感谢您的耐心:

在viewControllerA中,我从viewControllerB调用了很多方法

目前我正在使用

viewcontrollerB * vcB= [[viewcontrollerB alloc] init];
[vcB doSomething];
我在我的ViewControllerA中一遍又一遍地这样做,感觉很愚蠢

那么,什么是最好的方法呢

我可以将viewControllerB设置为viewControllerA的属性吗? 我应该使用委托方法吗?如果是,如何使用


期待您的见解

嗯,实际上可能存在一些与您的设计方法相关的问题。虽然您没有指定这两个视图控制器之间的实际关系,但即使在这种情况下,我也会说是的,您可以将第二个视图控制器作为第一个视图控制器的属性。 如果您能够更好地描述您执行的操作类型以及这两个视图控制器之间的关系,您可以期望得到更详细和更广泛的答案。 看起来您的第二个视图控制器实际上并没有显示在屏幕上,您只是重用了它的一些业务方法。这是不应该的。您应该在其他一些类中解耦这些方法,这些类封装了特定的共享业务行为

我还建议您使用MVVM设计模式获得认可,它解决了这些问题和其他更多类型的问题:

您可以使用委托

在ViewControllerB.h中:

@protocol ViewControllerBDelegate <NSObject>

-(void)doSomething;

@end


@interface ViewControllerB : UIViewController

@property (nonatomic, weak) id <ViewControllerBDelegate> delegate;

@end
在ViewControllerA中:

ViewControllerB *vcB = [[ViewControllerB alloc] init];
vcB.delegate = self;

#pragma mark - ViewControllerBDelegate
-(void)doSomething {
    //...
}

当您想在ViewControllerA中执行某些操作时,应在ViewControllerB中调用
[self.delegate doSomething]

是的,如果您想将数据传递给viewcontroller A,您可以创建属性并委托。注意:类名应该是驼峰大小写,viewcontrollerB应该是viewcontrollerB,只是为了更好的代码可读性。我认为这更像是一个基于意见的问题。通常,如果VC-a是VC-B的父级,VC-a将有一个VC-B的实例,并且可以直接调用函数。VC-B应该有一个代表。
ViewControllerB *vcB = [[ViewControllerB alloc] init];
vcB.delegate = self;

#pragma mark - ViewControllerBDelegate
-(void)doSomething {
    //...
}