这是一段非常简单的代码:
- (void)functionOne
{
[self performSelector:@selector(functionTwo) withObject:nil afterDelay:1.0];
}
- (void)functionTwo
{
[self performSelector:@selector(functionOne) withObject:nil afterDelay:1.0];
}
正如您所看到的,这两种方法中没有任何内容会导致内存消耗增长。但它会增长。很慢,但确实如此。每三秒约0.01 MB。为什么?我怎么能避免呢?
答案 0 :(得分:3)
您正在有效地创建无限循环。如果你想每秒切换一个对象的状态(正如你在评论中所说的那样),那就这样做:
创建一个类似的方法:
- (void)functionOne
{
if( [obj isEqual:stateA] ) {
obj = stateB;
} else {
obj = stateA;
}
}
并用计时器调用它:
NSTimer* myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self
selector:@selector(functionOne) userInfo:nil repeats:YES];
答案 1 :(得分:0)
为避免无限循环,您应使用NSTimer
和一个函数,在其中切换对象的状态。
在你的init方法中,或类似viewDidLoad
之类的东西,你应该启动像
- (void)viewDidLoad {
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(switchState:)
userInfo:nil
repeats:YES];
}
然后你使用像
这样的方法- (void) switchState:(NSTimer *)timer {
if ([[self yourState] isEqual:stateOne]) {
[self setYourState:stateTwo];
} else {
[self setYourState:stateOne];
}
}
答案 2 :(得分:0)
内存增长只是因为应用程序需要保持某种状态。每次调用执行选择器时,选择器都会被压入堆栈。该堆栈保存在内存中。因此增长。