我刚刚继承了代码库,该项目似乎主要由UIViews组成。
以下是2014年7月29日撰写的UIView头文件的示例,因此代码相对较新:
#import <UIKit/UIKit.h>
@interface SettingsView : UIView {
UIView *aView;
UIViewController *controller;
}
@property(nonatomic,strong)UIView * aView;
@property(nonatomic,strong)UIViewController * controller;
@end
你可以看到有一个指向UIViewController的指针。在实现文件中,mainView在几个地方使用。这是一个例子:
MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(0, yPos, scroller.frame.size.width, 50)];
myView = 102;
myView = mainView; // Here we are setting another view with this controller.
[scroller myView];
对我来说,这段代码感觉不对。但是我想知道是否有一个很好的理由,有人会有一个从UIView到UIViewController的指针。多年来我看到了我公平分享的iOS代码,这是我第一次见到这一点。
非常感谢任何见解。
答案 0 :(得分:2)
我也像这样使用我的观点。我使用了一个名为&#34; sender&#34;的变量。 UIView跟踪调用它的UIVC。然后我可以做各种逻辑操作,知道父级的大小,将视图添加为子视图而不明确说明它。
这是最好的方式吗?不,它打破了MVC,它没有明确地将UI与功能分开,但它也更方便,更容易编码。
您可以决定在UIView中添加会影响其senderVC的按钮或操作。
func openWebViewController(#URL: NSURL) {
var webViewController = SVModalWebViewController(URL: URL)
senderVC.presentViewController(webViewController, animated: true, completion: nil)
}
这是我使用指向UIVC指针的风格的一个小例子,对不起它很快但它应该是可以理解的。
答案 1 :(得分:0)
在UIViewController
内有UIView
引用是没有害处的,除非它创建一个强大的保留周期,ViewController
指向具有强引用的View
和{view
1}}也指向具有强引用的ViewController
,这不是viewController和view特有的,但它可能发生在任何两个对象上,在这种情况下,它们都不会得到dealloc和它的内存泄漏。
除此之外没有问题,在你的情况下它保持对viewController
的引用,因为它使用viewController的视图为subView
,这很好。
但最佳做法是保持业务逻辑远离view
并避免紧密耦合,在MVC环境中view
不应该有任何业务逻辑,控制器应该处理它,我会说上面的代码是不是很好的工作方式,并没有正确地跟随MVC并且紧密耦合。