nod*_*nja 2 cocoa cocoa-touch memory-leaks objective-c
我关心的一件事是我创建两个整数,但不释放它们.让他们成为NSIntegers会更好吗?
-(void) flipCoin {
int heads = [headsLabel.text intValue];
int tails = [tailsLabel.text intValue];
if (random() %2 ==1 )
{
heads++;
}
else {
tails++;
}
headsLabel.text = [NSString stringWithFormat:@"%d", heads] ;
tailsLabel.text = [NSString stringWithFormat:@"%d", tails];
}
Run Code Online (Sandbox Code Playgroud)
正如sha所说,局部变量在当前堆栈帧中分配.一旦当前函数调用返回,堆栈就会"弹出",并且当前调用所占用的内存不会被放弃,直到它被下一次被推入堆栈部分的调用覆盖.
那么为什么我们必须发布这样的变量:
MyClass *myObject = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)
好吧,你实际上不必担心"myObject".它就在你的整数堆栈中,当你的当前通话结束时它会被清理干净.
你需要担心的是myObject--指针指向的内存.它离开堆的某个地方.构造一个对象涉及向运行时询问一些半永久性的位置来放置它; 该进程返回指针存储的内存地址.
alloc并且release是Objective-C习惯用法,它们在很大程度上取代了C malloc()和free()函数,但它们最终都要求计算机在堆上留出内存,并且最终必须通过自动释放池,release消息或者返回所有内存.一个free()电话.