ios – 我的sub-viewControllers的弱或强属性?

#import <UIKit/UIKit.h>
#import "UCMapviewController.h"
#import "UCMenuviewController.h"
#import "UCOverviewController.h"

@interface UCRootViewController : UIViewController

@property (weak,nonatomic) UCMapviewController *mapviewController;
@property (weak,nonatomic) UCMenuviewController *menuviewController;
@property (weak,nonatomic) UCOverviewController *overviewController;

这是我的UCRootViewController的声明,它应该管理这些子viewControllers.他后来也将成为他们的代表,以便在何时应该显示一个控制器时进行处理.

rootViewController在UIAppDelegate中保持强大,并将一直保持活动状态.

那么使这些子视图控制器变弱是否正确?我不是100%肯定,但据我所知,当没有强指针指向它们时,弱指针会被释放.因为根很强大,让它们变弱是正确的,对吗?

#import <UIKit/UIKit.h>

@class UCRootViewController;
@interface UCOverviewController : UIViewController

@property (weak,nonatomic) UCRootViewController *rootviewController;

这是我的一个子viewControllers的标题.它们有一个指向(稍后)委托rootviewController的弱指针.是否足以声明@class UCRootviewController使它们调用委托方法?我甚至需要这个吗?

谢谢

编辑:我刚读了a nice article about ViewControllers和段落:

Always use high-quality view controller containers or
+[UIViewController presentModalViewController:animated:] to display view controllers in your application. If you need to keep a reference
to a view controller somewhere,use a weak reference,except if you
really want it to stay alive longer for caching purposes. In such
cases,be sure to correctly respond to low-memory conditions.

它说使用弱参考,你对此有何看法?

解决方法

强指针只与你的rootViewController绑定.这并不意味着它将自动强大指向rootViewController中的其他viewControllers.

您应该将这些属性设置为strong,以确保您的其他viewControllers不会以您不希望的方式取消分配.

如果你将它们推入导航堆栈就可以了,因为导航堆栈会自动指向它们.但是如果你只想在rootViewController中将他们的视图添加为子视图,那么你需要确保这些属性是强大的.

当没有强指针时,对象会被释放.由于没有强大的指针指向其他viewControllers,因此它们将被取消分配.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...