我在实现文件中声明了一个实例变量,可以使用synthesize
定义的属性进行访问@synthesize myProperty
现在,我想在cocos2d库的MenuItem的Selector事件中分配这个属性。您可以将其视为在回调函数中访问myProperty。出于某种原因,每当我访问该属性时,它都说“属性超出范围”。所以我试图分配访问self.myProperty工作!!
但是现在我在self.myProperty中有内存泄漏。如果我在dealloc中释放self.myProperty,那么它会抛出一个异常,说我也有myProperty版本。
更新1 :(代码)
NSString *声音;
@property(nonatomic,retain)NSString * voice; @synthesize的声音;
-(void)repeatAlphabet:(id)sender
{
*// I cannot access the voice variable in this function.*
[[SimpleAudioEngine sharedEngine] playEffect:[[voice lowercaseString] stringByAppendingString:@".caf"]];
}
-(void) addRepeatButtonOnScreen
{
CCMenuItemImage * menuItem1 =[CCMenuItemImage itemFromNormalImage:@"image1.png"
selectedImage: @"image2.png"
target:self
selector:@selector(repeatAlphabet:)];
CCMenu *menu = [CCMenu menuWithItems:menuItem1,nil];
menu.position = ccp(30, 450);
[self addChild:menu];
}
答案 0 :(得分:0)
假设您已经定义了与您的属性相对应的ivar,也称为myProperty,并且您的属性为retain
或copy
:在您的dealloc中,您应该[myProperty release];
而不是{{1 }}。
更新:经过讨论并显示更多代码......“超出范围”可能是未保留应保留的值的症状。例如,字符串[self.myProperty release]
不会保留(并且将超出范围),使用value = @"Value"
或self.value = @"Value"
修复。