如何在 Xcode 中不释放视图

Posted

技术标签:

【中文标题】如何在 Xcode 中不释放视图【英文标题】:How not to Release a View in Xcode 【发布时间】:2012-02-13 18:10:05 【问题描述】:

您好,我有一个秒表视图,当用户单击后退按钮转到另一个视图时,秒表将停止。有人告诉我这是因为它正在发布。

我希望秒表继续运行。

那么我该如何取消或不允许它被释放呢?

这是我的代码。

.h

UILabel *stopWatchLabel;

NSTimer *stopWatchTimer; // Store the timer that fires after a certain time
NSDate *startDate; // Stores the date of the click on the start button

@property (nonatomic, retain) IBOutlet UILabel *stopWatchLabel;

- (IBAction)onStartPressed:(id)sender;
- (IBAction)onStopPressed:(id)sender;

.m

- (void)viewDidUnload

[self setStopWatchLabel:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;



- (void)updateTimer

NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss.SSS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString=[dateFormatter stringFromDate:timerDate];
stopWatchLabel.text = timeString;


- (IBAction)onStartPressed:(id)sender 
startDate = [NSDate date];

// Create the stop watch timer that fires every 10 ms
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
                                                  target:self
                                                selector:@selector(updateTimer)
                                                userInfo:nil
                                                 repeats:YES];


- (IBAction)onStopPressed:(id)sender 
[stopWatchTimer invalidate];
stopWatchTimer = nil;
[self updateTimer]; 

【问题讨论】:

【参考方案1】:

我会尝试不同的方法,而不是改变视图控制器的行为:

您可以通过将计时器功能移动到单独的对象中来使计时器独立于视图控制器。这样,计时器对象的生命周期与视图控制器对象不同。例如,您可以在应用程序委托中创建(和释放)计时器对象,并创建对它的引用并在视图控制器中访问它。

【讨论】:

以上是关于如何在 Xcode 中不释放视图的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Storyboard 中不提供容器视图

如何判断我的视图控制器是不是会从内存中释放?

如何在 Xcode 上的选项卡式应用程序中添加选项卡

CFBundleUrlTypes 在 Info.plist 中可见,但在它的 XCode 视图中不可见

UITableViewAutomaticDimension 在 Xcode 6.3 中不起作用

如何使用 Xcode 检测对象的双重释放?