Objective - C 直接初始化(对于 Cocos2D 风格的动作)
Posted
技术标签:
【中文标题】Objective - C 直接初始化(对于 Cocos2D 风格的动作)【英文标题】:Objective - C direct initialization (For Cocos2D style actions) 【发布时间】:2011-07-19 05:12:43 【问题描述】:我有一个初始化类如下:
@implementation MyClass
+(id) initializeMyClass
return [[[self alloc] initMyClass] autorelease];
-(id) initMyClass
if (([self = [super init]))
return self;
-(void) dealloc
NSLog(@"Deallocating");//I also used CCLOG instead.
[super dealloc];
@end
我在另一个没有对象的类中初始化这个类:
[MyClass initializeMyClass];
这工作正常,但未调用 MyClass 的 dealloc 方法并且由于某些资源未释放而崩溃。
这完全令人费解,在网上找不到任何东西。 如果有人能提出解决方案或替代方法,我将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:如果你需要将你的 MyClass 初始化为另一个类,那么你应该像这样写
@implementation MyClass
+(id) initializeMyClass
return [[[self alloc] initMyClass] retain];
-(id) initMyClass
if (([self = [super init]))
return self;
-(void) dealloc
NSLog(@"Deallocating");//I also used CCLOG instead.
[super dealloc];
@end
【讨论】:
感谢您的回复。问题似乎仍然存在。释放后似乎也没有调用 dealloc。 只有当我将初始化的指针传递给一个对象:(id object = [MyClass initializeMyClass])并调用dealloc:([object dealloc])时,它才会真正被释放。 如果你使用retain或alloc,那么你有责任通过发送[object release]来释放它;消息... 刚刚有人指出了一个错误。我正在使用一个在我的实际实现中保留类的对象。类似于 NSArray 保留添加到其中的对象的方式。感谢您的帮助。以上是关于Objective - C 直接初始化(对于 Cocos2D 风格的动作)的主要内容,如果未能解决你的问题,请参考以下文章