Iphone Objective-C属性释放错误

Iphone Objective-C属性释放错误,iphone,objective-c,properties,release,Iphone,Objective C,Properties,Release,是什么导致了这次坠机?从我所读到的一切来看,我正确地使用了这个属性。当我第一次调用loadDot2Dot方法时,它工作得很好。然后,当我返回主菜单调用LoadMain菜单并再次尝试加载dot2DotVC调用loadDot2DotVC时,我得到了一个崩溃的Exc_Bad_访问-没有进一步的信息 当我评论出[d2d版本];loadDot2Dot中的线路工作正常。我做错什么了吗?我知道我应该在那里释放 干杯 这是你的答案 #import <UIKit/UIKit.h> @class Me

是什么导致了这次坠机?从我所读到的一切来看,我正确地使用了这个属性。当我第一次调用loadDot2Dot方法时,它工作得很好。然后,当我返回主菜单调用LoadMain菜单并再次尝试加载dot2DotVC调用loadDot2DotVC时,我得到了一个崩溃的Exc_Bad_访问-没有进一步的信息

当我评论出[d2d版本];loadDot2Dot中的线路工作正常。我做错什么了吗?我知道我应该在那里释放

干杯

这是你的答案

#import <UIKit/UIKit.h>

@class MenuVC;
@class Dot2DotVC;

@interface MyViewController : UIViewController {

    UIViewController *menuVC;           
    UIViewController *dot2DotVC;        

}
@property (nonatomic, retain) UIViewController *menuVC;
@property (nonatomic, retain) UIViewController *dot2DotVC;


- (IBAction)loadMainMenu:(id)sender;   
- (IBAction)loadDot2Dot:(id)sender;   


@end
ator/Documents/Princess_Pets/main.m:14

Program received signal:  “EXC_BAD_ACCESS”. (gdb) bt
#0  0x30fb15fa in objc_msgSend ()
#1  0x314b9aca in CFRelease ()
#2  0x31525b58 in __CFTypeCollectionRelease ()
#3  0x31503522 in __CFArrayReleaseValues ()
#4  0x315038a2 in __CFArrayDeallocate ()
#5  0x314b9bc0 in _CFRelease ()
#6  0x314b9a9a in CFRelease ()
#7  0x30338038 in -[NSCFArray release] ()
#8  0x30fb29e8 in objc_setProperty ()
#9  0x0000f246 in -[Dot2DotVC setCurrentImages:] (self=0x13a310,
_cmd=0x19a8c, newArray=0x0) at /Users/adminstrator/Documents/Princess_Pets/Classes/Dot2DotVC.m:42
#10 0x0000ec36 in -[Dot2DotVC dealloc] (self=0x13a310, _cmd=0x33005660) at /Users/adminstrator/Documents/Princess_Pets/Classes/Dot2DotVC.m:1474
#11 0x314ba71a in -[NSObject release] ()
#12 0x30fb29e8 in objc_setProperty ()
#13 0x00004452 in -[Princess_PetsViewController setDot2DotVC:] (self=0x11d800,
_cmd=0x194f9, _value=0x145100) at /Users/adminstrator/Documents/Princess_Pets/Classes/Princess_PetsViewController.m:20
#14 0x00003234 in -[Princess_PetsViewController loadDot2Dot:] (self=0x11d800,
_cmd=0x1962e, sender=0x146840) at /Users/adminstrator/Documents/Princess_Pets/Classes/Princess_PetsViewController.m:107
#15 0x314db16c in -[NSObject performSelector:withObject:withObject:] ()
#16 0x322930d4 in -[UIApplication sendAction:to:from:forEvent:] ()
#17 0x32293074 in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
#18 0x32293046 in -[UIControl sendAction:to:forEvent:] ()
#19 0x32292d98 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#20 0x322933e6 in -[UIControl touchesEnded:withEvent:] ()
#21 0x32291dbc in -[UIWindow _sendTouchesForEvent:] ()
#22 0x32291704 in -[UIWindow sendEvent:] ()
#23 0x3228d326 in -[UIApplication sendEvent:] ()
#24 0x3228cc92 in _UIApplicationHandleEvent ()
#25 0x3414eb32 in PurpleEventCallback ()
#26 0x314d8d9c in CFRunLoopRunSpecific ()
#27 0x314d84e0 in CFRunLoopRunInMode ()
#28 0x3414e0da in GSEventRunModal ()
#29 0x3414e186 in GSEventRun ()
#30 0x32241430 in -[UIApplication _run] ()
#31 0x3223f95a in UIApplicationMain ()
#32 0x00002852 in main (argc=1, argv=0x2ffff60c) at /Users/adminstrator/Documents/Princess_Pets/main.m:14ator/Documents/Princess_Pets/main.m:14

从回溯中,您的问题似乎直接出现在Dot2DotVC中。在其-dealloc中,它调用了-setCurrentImages:on self,它释放了旧值,该值似乎包含一个垃圾对象。换句话说,在视图控制器上调用dealloc时,Dot2DotVC上的数组属性currentImages至少包含一个无效对象

作为补充说明,我强烈建议您不要在-dealloc中使用属性访问。您在问题中列出的-dealoc最好是:

- (void)dealloc {
    [menuVC release];
    [dot2DotVC release];
    [super dealloc];
}

这避免了覆盖的setter或延迟的KVO观察器的任何潜在问题。

从回溯中,您的问题似乎直接出现在Dot2DotVC中。在其-dealloc中,它调用了-setCurrentImages:on self,它释放了旧值,该值似乎包含一个垃圾对象。换句话说,在视图控制器上调用dealloc时,Dot2DotVC上的数组属性currentImages至少包含一个无效对象

作为补充说明,我强烈建议您不要在-dealloc中使用属性访问。您在问题中列出的-dealoc最好是:

- (void)dealloc {
    [menuVC release];
    [dot2DotVC release];
    [super dealloc];
}

这避免了覆盖的setter或延迟的KVO观察器的任何潜在问题。

发布来自崩溃报告或GDB的回溯。如果您正在调试,除了EXC_BAD_ACCESS之外,不太可能没有其他信息,除非您将堆栈的错误部分丢弃。谢谢您的回复。对不起我的无知。。。这就是我需要发布的吗?运行运行…[切换到线程12035][切换到线程12035]共享库应用加载规则所有继续程序收到信号:“EXC\u BAD\u ACCESS”。gdbHit“Continue”(如果必须),直到看到更完整的错误和堆栈跟踪。已发布堆栈跟踪。不要担心ViewController的不同名称-我将其更改为MyViewController只是为了在崩溃报告或GDB的回溯后溢出。如果您正在调试,除了EXC_BAD_ACCESS之外,不太可能没有其他信息,除非您将堆栈的错误部分丢弃。谢谢您的回复。对不起我的无知。。。这就是我需要发布的吗?运行运行…[切换到线程12035][切换到线程12035]共享库应用加载规则所有继续程序收到信号:“EXC\u BAD\u ACCESS”。gdbHit“Continue”(如果必须),直到看到更完整的错误和堆栈跟踪。已发布堆栈跟踪。不要担心ViewController的不同名称-我将其更改为MyViewController只是为了溢出帖子