【发布时间】:2010-04-26 08:39:11
【问题描述】:
我正在开发一个图形应用程序,并试图将渲染器从 OpenGL 更改为 Quartz2D,以使文本渲染更容易。
之前工作正常的保留 NSDate 对象突然似乎正在释放自身,当 NSMutableString 尝试附加它的描述(现在为“nil”)时导致崩溃。
构建和分析不会报告任何潜在问题。
简化,代码如下:
NSDate* aDate
-(id)init
{
aDate = [[NSDate date] retain]
return self;
}
-(void)drawRect(CGRect)rect
{
NSMutableString* stringy = [[NSMutableString alloc] init];
//aDate is now deallocated and pointing at 0x0?
[stringy appendString:[aDate description]]; //Crash
}
我要强调的是,实际代码比这复杂得多,有一个单独的线程也可以访问日期对象,但是适当的锁已经到位,并且在单步执行代码时[aDate release] 不会在任何地方被调用。
使用[[NSDate alloc] init] 具有相同的效果。
我还应该补充一点,init 是第一个被调用的函数。
谁能提出一些我可能忽略的事情,或者为什么 NSDate 对象正在(或似乎正在)释放自己?
【问题讨论】:
-
我应该做一个重要的说明;绝对没有在 init 方法中分配/初始化的内容在 drawrect 方法的范围内;好像它在课堂外以某种方式被调用和执行?问题似乎不在于 NSDate 本身。
标签: objective-c memory-management nsdate dealloc