我正在开发一个图形应用程序,并试图将渲染器从OpenGL更改为Quartz2D以使文本渲染更容易。NSDate内存问题(再次)
在NSMutableString尝试附加它的描述(现在为'nil')时,突然之间似乎正在释放自身的保留的NSDate对象,导致崩溃。
Build &分析不报告任何潜在的问题。
简化,代码如下所示:
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本身没有关系。 – Tobster 2010-04-26 09:40:33