Iphone Cocos2d菜单项选择器和访问实例变量
我在实现文件中声明了一个实例变量,可以使用synthesis定义的属性访问它Iphone Cocos2d菜单项选择器和访问实例变量,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我在实现文件中声明了一个实例变量,可以使用synthesis定义的属性访问它 @synthesize myProperty 现在,我想在cocos2d库中MenuItem的选择器事件中为这个属性赋值。您可以将其视为在回调函数中访问myProperty。出于某种原因,每当我访问该属性时,它都会显示“属性超出范围”。因此,我尝试将访问权限分配给self.myProperty,该属性有效 但是现在我在self.myProperty中有一个内存泄漏。如果我在dealloc中释放self.myPrope
@synthesize myProperty
现在,我想在cocos2d库中MenuItem的选择器事件中为这个属性赋值。您可以将其视为在回调函数中访问myProperty。出于某种原因,每当我访问该属性时,它都会显示“属性超出范围”。因此,我尝试将访问权限分配给self.myProperty,该属性有效
但是现在我在self.myProperty中有一个内存泄漏。如果我在dealloc中释放self.myProperty,那么它会抛出一个异常,表示我也有myProperty释放
更新1:(代码)
NSString*语音
@属性(非原子,保留)NSString*语音;
@合成语音
-(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];
}
假设您已经定义了一个与您的属性(也称为myProperty)对应的ivar,并且您的属性是
retain
或copy
:在DealLocal中,您应该执行[myProperty release]代码>非[self.myProperty release]
更新:经过讨论和更多代码显示“超出范围”可能是未保留应保留的值的症状。例如,对于字符串value=@“value”
不保留(并且将超出范围),请使用self.value=@“value”
或value=[@“value”保留]
进行修复,谢谢您的回复!是的,我有[myProperty release],但由于我在MenuItem选择器的回调函数中使用self.myProperty,因此self.myProperty从未被释放,并且它在instruments应用程序中显示内存泄漏。您需要更具体地说明“使用”的含义(显示代码会有很大帮助)。如果您的属性被合成并保留,self.myProperty=value会在保留之前自动释放以前的值,因此没有泄漏。请检查以上更新的代码!谢谢你的帮助!好的,当出现问题时,声音的价值是什么?它是如何设置的?语音的值分配在不同的功能中。该值通常只是一个字符串,如“voice1”、“voice2”等。但是,当repeatAlphabet if触发时,无法访问可变语音,并且该值被视为超出范围!