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 风格的动作)的主要内容,如果未能解决你的问题,请参考以下文章

Swift和Objective-C的优缺点对比

访问 NSDictionary 值 Objective C

Objective c类的初始化

Objective C 中的对象分配和初始化

从 Swift 调用 Objective C 自定义初始化函数

UIButtons 的 Objective C 数组(包括处理初始化、操作等)