Objective-c中的奇怪代码

时间:2010-06-24 12:17:41

标签: iphone objective-c

我找到了其他人编写的代码的一部分。

@interface Fly : CCSprite
{   
id var1;
id var2;
}

然后在.m文件中

- (void) dealloc
{
[var1 release];
[var2 release];

// don't forget to call "super dealloc"
[super dealloc];
}

这是正确的吗?我不认为可以释放id类型。也许isa变量...你能解释一下为什么这个被释放了吗?或者你能帮我解释一下为什么这么糟糕?

3 个答案:

答案 0 :(得分:3)

id可以保留任何对象,当您向其发送消息时,它可能会也可能不会响应它。如果它确实响应release(Cocoa中的大多数类都做,因为它们是子类NSObject),它将被释放。根据正在运行的操作系统,如果对象没有响应消息(iOS抛出异常,OS X日志并继续),则可能会出现异常,但可以在运行时使用respondsToSelector:检查

答案 1 :(得分:1)

id是动态类型,它可以引用任何对象。因为它是一个对象,它可以被释放和解除分配

答案 2 :(得分:0)

代码似乎对我而言。

id var1

只是声明一个通用对象变量。它可以被释放,因为它只是内存中的一个对象

然后在解除分配期间从内存中释放两个变量