Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Cocos2d菜单项选择器和访问实例变量_Iphone_Objective C_Cocos2d Iphone - Fatal编程技术网

Iphone Cocos2d菜单项选择器和访问实例变量

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

我在实现文件中声明了一个实例变量,可以使用synthesis定义的属性访问它

@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触发时,无法访问可变语音,并且该值被视为超出范围!