【问题标题】:how to unset/kill static int variables in objective c如何在目标 c 中取消设置/杀死静态 int 变量
【发布时间】:2011-09-13 10:29:44
【问题描述】:

我正在使用静态 int 变量但有一些问题。问题是它没有被重置。 如果我离开此页面并再次访问,我会在重置时找到以前的值。

请给我解决方案。

这是我的代码

- (void)updateQuestion:(NSTimer *)theTimer {
    static int questionCounter = 1;

    questionCounter += 1;


    count=(questionCounter%QUESTION_TIME_LIMIT);

    tfLeftTime.text=[NSString stringWithFormat:@"%d",QUESTION_TIME_LIMIT];


    tmLeftTime=[[NSTimer alloc] init];
    tmLeftTime=[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLeftTime:) userInfo:nil repeats:YES];
    [self playMusic];
    if (questionCounter>QUESTION_PER_LEVEL) {
        if ([tmQuestion isValid]) {
            [tmQuestion invalidate];
            questionCounter=1;
            count=1;
            tmQuestion=nil;
            [self showAdvertisement];
        }
    }

}

感谢和问候 希瓦姆

【问题讨论】:

  • 你如何使用那些静态变量?你能提供一些代码吗?
  • 我已经在帖子中添加了我的代码
  • 这里是“count=(questionCounter%QUESTION_TIME_LIMIT);” count 变量也是在另一个函数中声明的静态 Int。

标签: iphone objective-c static int reset


【解决方案1】:

你也可以使用实例变量来达到你想要的效果。

只要对象存在,计数器就会一直存在,并在您不再需要时销毁。

【讨论】:

  • 好吧,你的意思是我应该在 .h 文件中声明一个变量?
  • 是的,在接口声明中:@interface myClass:NSObject { int questionCounter; }@结束
  • 我应该如何接受你的回答。请指导我。其实我不知道。
  • 在我回答的左边,有一个半透明的V,点一下它就变成绿色了:)
【解决方案2】:
  1. 您不能在一种方法中声明静态变量并在另一种方法中使用。我假设您在文件中声明它,在任何方法之外。请改用实例变量。
  2. 你有一个内存泄漏:

    tmLeftTime=[[NSTimer alloc] init];

    tmLeftTime=[NSTimer scheduledTimerWithTimeInterval:1.0f target:self 选择器:@selector(updateLeftTime:) userInfo:nil repeats:YES];

tmLeftTime 的首次分配永远不会释放。

[NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:] 给你一个自动释放的计时器。

【讨论】:

  • 好的,那么如何自动释放这个计时器
  • 计划的计时器已经自动释放。当您不再需要它时,调用 [tmLeftTime invalidate],它将停止它并从运行循环中删除。自动释放池稍后会处理它。不要忘记使指针 tmLeftTime = nil 无效,因为在被释放之后,您可能会有一个悬空指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多