tut*_*u47 0 iphone memory-leaks objective-c uilabel
我正在使用一个简单的函数通过标签向用户显示消息.功能如下:
-(void) showMessage:(NSString*) message
{
Message.text = message;
[message release];
}
Run Code Online (Sandbox Code Playgroud)
如果我从主线程调用此函数,则没有内存泄漏.但是,如果我从一个单独的线程调用此函数,则一旦调用该函数,仪器监视器就会显示16字节的内存泄漏.如果我注释掉函数调用,则看不到泄漏.有谁知道为什么?我正在使用iPhone SDK 3.0.仪器监视器不指向我的任何功能来指示泄漏.它只显示UILabel的一个或两个函数.
看看那里的代码,似乎你的内存管理错误 - 你永远不 应该把release你收到的对象作为方法参数.考虑以下:
-(void)doSomething {
NSString *aStr = [[NSString alloc] init];
[self showMessage:aStr];
NSString *anotherStr = [aStr stringByAppendingString:@"Hi"];
// ^^ This call will crash as aStr has been released and is invalid.
}
-(void) showMessage:(NSString*) message {
Message.text = message;
[message release];
}
Run Code Online (Sandbox Code Playgroud)
...在上面的示例中使用您的方法将导致崩溃,因为showMessage:方法释放传递的字符串.
我知道这并没有直接回答你的问题,但让内存管理正确,你的问题可能会消失.我建议你阅读Apple的Cocoa内存管理编程指南.
编辑:此外,UIKit不是线程安全的 - 你不应该从主线程以外的任何东西调用消息到UIKit对象.请参阅performSelectorOnMainThread:withObject:从另一个线程调用主线程上的消息.
| 归档时间: |
|
| 查看次数: |
1432 次 |
| 最近记录: |