我有这个myViewController,它实例化了它自己的实例。
目前,我有一个触发方法的UIButton
-(void)somethingImportant
但是,我希望在ViewDidLoad中发生某些重要,所以我不必按下该按钮。
但是如果我在myViewController的 ViewDidLoad 中添加某些重要,则会多次递归调用myViewController的子视图。
我尝试在我的应用代理的应用程序didFinishLaunchingWithOptions:中添加 somethingImportant ,但不知怎的,它也无法正常工作。
修改
所以这里可能是相关的代码。我有这个UIScrollView,其中包含很多myViewController的子视图:
- (void)configureScrollView
{
for (int i = 0; i < [self.childViewControllers count]; i++) {
...
myViewController * theSubview =[self.childViewControllers objectAtIndex:i];
....
[theScrollView addSubview:[theSubview view]];
}
}
确保只调用 somethingImportant 的最佳方法是什么?
答案 0 :(得分:1)
我有这个类,它实例化了它自己的实例。
这听起来像个坏主意,如果你不小心,很容易导致递归。所以我建议你重新考虑一下你的逻辑。如果您需要一个类的多个实例,则应该从该类外部管理这些实例,而不是从内部管理。
但是,如果您仍坚持这样做 - 您可以执行与sschale suggests类似的操作,并使用变量来跟踪您是否调用了方法。
问题是你需要将此变量定义为static
,以便将其存储在 class 范围内,而不是实例范围。
例如:
static BOOL firstCalled = NO;
- (void)viewDidLoad {
[super viewDidLoad];
if (!firstCalled) {
firstCalled = YES;
[self foo];
}
}
答案 1 :(得分:0)
每个子类都应该在链上调用[super viewDidLoad]
,这样代码才能真正调用一次。
但是,如果您需要确保只执行一次,请将@property (nonatomic) BOOL runOnce;
添加到该文件的界面,然后在-(viewDidLoad)
中执行:
if(!self.runOnce) {
//all code that is only run once
self.runOnce = YES;
}