尽管保留了Objective C变量,但它仍然被释放

时间:2011-07-18 20:28:30

标签: objective-c retain instance-variables null

我有一个marshmallow类,其中包含(除此之外)CCSprite对象作为实例变量。

这是init方法:

-(id) init
{
    if((self = [super init]))
    {   
        model = [[CCSprite spriteWithFile:@"marshmallow.png"] retain];
        maxSpeed = 5; //160px per second (maxspeed * PTM_Ratio = px/second max)
        gravity = 9.81; // in meters/sec^2
        health = 3;
    }

    return self;
}

该变量在另一个文件中声明为全局变量,其行为:

Marshmallow *mainChar;

稍后在文件中,使用以下行设置(已启动/已分配):

mainChar = [[mainChar alloc] init];
在写上一行时,xcode给了我一个警告,Marshmallow可能不会响应alloc。 (我不认为那是相关的。只是提到任何看似错误的事情)

我的问题是以下代码行返回nil:

[mainChar getModel];

为什么它返回nil而不是实例变量?

这是getModel函数:

-(CCSprite *)getModel
{
    return model;
}

3 个答案:

答案 0 :(得分:4)

mainChar = [[mainChar alloc] init];

不应该

mainChar = [[Marshmallow alloc] init];

消息显示该类的对象可能无法响应它,而不是本身。

答案 1 :(得分:2)

您的问题在于mainChar变量的初始化。您正在寻找的是:

mainChar = [[mainChar alloc] init];

您收到的警告告诉您Marshmallow类型的实例不会响应-alloc消息。这是你的问题:你想要调用+alloc类方法,如下所示:

mainChar = [[Marshmallow alloc] init];

答案 2 :(得分:1)

我想你想做

mainChar = [[MarshMallow alloc] init];

而不是

mainChar = [[mainChar alloc] init];

您收到的错误信息非常重要。