禁止子视图上的viewdidload
Prohibit viewdidload on subviews
我有这个 myViewController,它实例化自己的实例。
目前,我有一个 UIButton,它触发方法
-(void)somethingImportant
但是,我希望 somethingImportant 在 ViewDidLoad 期间发生,所以我不必按下那个按钮。
但是如果我把 somethingImportant 放在 myViewController 的 ViewDidLoad 中,它会被递归调用多次,因为我有一个 myViewController 的子视图。
我试图将 somethingImportant 放入我的应用程序委托的 application didFinishLaunchingWithOptions: 中,但不知何故这也不起作用。
编辑
下面是可能相关的代码。我有这个 UIScrollView,它有很多 myViewController 的子视图:
- (void)configureScrollView
{
for (int i = 0; i < [self.childViewControllers count]; i++) {
...
myViewController * theSubview =[self.childViewControllers objectAtIndex:i];
....
[theScrollView addSubview:[theSubview view]];
}
}
确保 somethingImportant 只被调用一次的最佳方法是什么?
每个子类都应该在链上调用 [super viewDidLoad]
,这样代码实际上只应该被调用一次。
但是,如果您需要确保它只执行一次,请将 @property (nonatomic) BOOL runOnce;
添加到该文件的界面,然后在 -(viewDidLoad)
中执行:
if(!self.runOnce) {
//all code that is only run once
self.runOnce = YES;
}
I have this class, that instantiates instances of itself.
从本质上讲,这听起来像是个坏主意,如果您不小心,很容易导致递归。因此,我建议您重新考虑您的逻辑。如果您需要 class 的多个实例,您应该从 class 外部而不是内部管理这些实例。
但是,如果您仍然坚持这样做 - 您可以执行类似于 的操作,并使用变量来跟踪您是否调用了您的方法。
问题是您需要将此变量定义为 static
以便将其存储在 class 范围,而不是实例范围.
例如:
static BOOL firstCalled = NO;
- (void)viewDidLoad {
[super viewDidLoad];
if (!firstCalled) {
firstCalled = YES;
[self foo];
}
}
我有这个 myViewController,它实例化自己的实例。
目前,我有一个 UIButton,它触发方法
-(void)somethingImportant
但是,我希望 somethingImportant 在 ViewDidLoad 期间发生,所以我不必按下那个按钮。
但是如果我把 somethingImportant 放在 myViewController 的 ViewDidLoad 中,它会被递归调用多次,因为我有一个 myViewController 的子视图。
我试图将 somethingImportant 放入我的应用程序委托的 application didFinishLaunchingWithOptions: 中,但不知何故这也不起作用。
编辑
下面是可能相关的代码。我有这个 UIScrollView,它有很多 myViewController 的子视图:
- (void)configureScrollView
{
for (int i = 0; i < [self.childViewControllers count]; i++) {
...
myViewController * theSubview =[self.childViewControllers objectAtIndex:i];
....
[theScrollView addSubview:[theSubview view]];
}
}
确保 somethingImportant 只被调用一次的最佳方法是什么?
每个子类都应该在链上调用 [super viewDidLoad]
,这样代码实际上只应该被调用一次。
但是,如果您需要确保它只执行一次,请将 @property (nonatomic) BOOL runOnce;
添加到该文件的界面,然后在 -(viewDidLoad)
中执行:
if(!self.runOnce) {
//all code that is only run once
self.runOnce = YES;
}
I have this class, that instantiates instances of itself.
从本质上讲,这听起来像是个坏主意,如果您不小心,很容易导致递归。因此,我建议您重新考虑您的逻辑。如果您需要 class 的多个实例,您应该从 class 外部而不是内部管理这些实例。
但是,如果您仍然坚持这样做 - 您可以执行类似于
问题是您需要将此变量定义为 static
以便将其存储在 class 范围,而不是实例范围.
例如:
static BOOL firstCalled = NO;
- (void)viewDidLoad {
[super viewDidLoad];
if (!firstCalled) {
firstCalled = YES;
[self foo];
}
}