【问题标题】:When to release objects in a Tab bar application?何时释放标签栏应用程序中的对象?
【发布时间】:2011-04-28 05:39:19
【问题描述】:

这是我的问题here的扩展

这是场景:

我有三个选项卡,其中有一个开关。当我触摸开关时,标签会更新(打开或关闭),并且灯泡的图像会从一个 jpg 更改为另一个。所以我正在使用 UIImageView 来更改 UIImage。

#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController {
    UISwitch *switch1;
    UILabel *status1;
}

@property (nonatomic,retain) IBOutlet UISwitch *switch1;
@property (nonatomic,retain) IBOutlet UILabel *status1;
- (IBAction) switch1Change;
@end

实现是

#import "FirstViewController.h"
@implementation FirstViewController
@synthesize switch1;
@synthesize status1;
- (IBAction) switch1Change
{
    if (switch1.on) {
        status1.text = @"ON";
        ...
    }
    else {
        status1.text = @"OFF";
        ...
    }
}

我无法理解何时释放这些对象。我尝试在 - (void) dealloc {} 方法中提供 [switch1 release]。但是当我切换标签时,应用程序崩溃了。如何做到这一点?

【问题讨论】:

  • 我怀疑你的崩溃与你放在[class dealloc] 中的[switch1 release] 无关,因为它只有在出现内存警告时才会被调用。我建议更仔细地查看运行日志并在调试模式下工作,以查看导致崩溃的实际错误是什么。
  • 在您的 dealloc 方法(或在 ViewDidUnload 中)释放保留/复制的对象(如在您的 IBOutlets 中)是正确的。有关详细信息,请参阅 stackoverflow.com/questions/3965399/…developer.apple.com/library/ios/#featuredarticles/…。您是否删除了发布声明并且它没有崩溃?我倾向于认为其他东西会使您的应用程序崩溃...
  • @tsakoyan :是的,我删除了发布声明并且应用程序没有崩溃。我将查看运行日志并将其发布在此处。

标签: iphone objective-c xcode tabbar


【解决方案1】:

dealloc 中的[switch1 release] 似乎是正确的,你得到的崩溃是什么?可能与此无关。

如果您设置断点,您可能会发现选项卡没有被释放;一旦被标签栏加载,它就会让它们保持在周围。所有选项卡的视图控制器也在开始时加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多