我正在开发一个图形应用程序,并试图将渲染器从 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 对象正在(或似乎正在)释放自己?