这个Objective-C代码是否会泄漏内存?

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)

Sea*_*ell 7

正如sha所说,局部变量在当前堆栈帧中分配.一旦当前函数调用返回,堆栈就会"弹出",并且当前调用所占用的内存不会被放弃,直到它被下一次被推入堆栈部分的调用覆盖.

那么为什么我们必须发布这样的变量:

MyClass *myObject = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

好吧,你实际上不必担心"myObject".它就在你的整数堆栈中,当你的当前通话结束时它会被清理干净.

你需要担心的是myObject--指针指向的内存.它离开堆的某个地方.构造一个对象涉及向运行时询问一些半永久性的位置来放置它; 该进程返回指针存储的内存地址.

alloc并且release是Objective-C习惯用法,它们在很大程度上取代了C malloc()free()函数,但它们最终都要求计算机在堆上留出内存,并且最终必须通过自动释放池,release消息或者返回所有内存.一个free()电话.