我是Objective C和Cocos2D的初学者
我看了Features of use @property and @synthesize (cocos2d)
评论是对内存中的错误的引用。这些错误是什么?
在我的代码中我使用:
//interface
{
CC_bla_bla *a;
}
@property(nonatomic, retain) CC_bla_bla *a;
//implementation
@synthesize a;
self.a=[CC_bla_bla load_value:123123]
//dealloc
[self.a release]
self.a = nil;
在课堂上,我总是使用self.a进行所有操作。那不好吗?
在什么意义上使用“实例变量”a?
答案 0 :(得分:0)
属性最常用于从其他视图控制器获取内容。您可以仅在某个视图控制器中使用属性,但您必须谨慎。
既然你这样做:
@property(nonatomic, retain) CC_bla_bla *a;
保留计数为1,就像你一样,你必须在dealloc中释放它。但是你说你做了一个= [[CC alloc]等等......那么它的保留计数为2。
希望你理解这一点。当您需要使用属性时,您将自己意识到。
答案 1 :(得分:0)
属性只是将一些“元数据”与您的变量相关联,当您通过对象访问此变量时将使用这些变量。 @synthesize指令将使用属性config生成getter和变量的setter。
例如:
self.a = [CC_bla_bla load_value:123123]; // The object is retained because of the property
// This is equivalent to the previous line
[self setA:[CC_bla_bla load_value:123123]];
// ------
// By the same way
self.a;
// is equivalent to
[self a];
// ------
// method generated by your property
- (void)setA:(CC_bla_bla *)newA
{
[newA retain];
[a release];
a = newA;
}
但是如果直接使用变量而不传递对象,则不使用属性值。例如:
a = [CC_bla_bla load_value:123123]; // The object is not retained so you may have unexcepted behaviors
// A good solution
a = [[CC_bla_bla load_value:123123] retain];
我希望它能帮助你澄清一些观点。如需进一步阅读,您可以观看tutorial。
答案 2 :(得分:0)
我认为你的代码正确。 永远打电话给你的财产。很好。 但是,只有当[CC_bla_bla loadvalue:]不保留创建的对象时,您的代码才可以正常使用。如果你的loadvalue函数保留了创建的对象,并且属性会再次保留它,那么它应该被释放两次。