Как проверить, делался ли NSTimer уже недействительным

У вас уже есть максимальная зарплата, вам нужно сохранить индекс сотрудника с самой высокой зарплатой, как только вы его получите. Ваш код должен выглядеть следующим образом.

var projects = [
  //Object(0)		
  {
    projectName: "Winter",
    projectCode: "O0123",
    employee: [{
        title: "Mr.",
        name: "Tom",
        id: 1005,
        salary: 12345
      },
      {
        title: "Mr.",
        name: "Bunny",
        id: 1009,
        salary: 54321
      },
      {
        title: "Mr.",
        name: "Harris",
        id: 1010,
        salary: 23456
      },
    ]
  },
  //Object(1)
  {
    projectName: "Summer",
    projectCode: "P10406",
    employee: [{
        title: "Mr.",
        name: "Seth",
        id: 1006,
        salary: 1234
      },
      {
        title: "Mr.",
        name: "Sam",
        id: 1011,
        salary: 654321
      },
    ],
  }
]


console.log(projects.length);

let maxSalary = 0;
let employeeWithMaxSalary = {};

for (var i = 0; i < projects.length; i++) {
  console.log(projects[i].projectName);

  for (var j = 0; j < projects[i].employee.length; j++) {
    console.log("\t" + projects[i].employee[j].title + projects[i].employee[j].name + "\n" + "\t" + "Salary: " + projects[i].employee[j].salary);

    if (i == 0 && j == 0) {
      maxSalary <= projects[i].employee[j].salary;
    }

    if (projects[i].employee[j].salary > maxSalary) {
      maxSalary = projects[i].employee[j].salary;
      employeeWithMaxSalary = projects[i].employee[j];
    }
  }
}

console.log("Max Salary = " + maxSalary);
console.log(employeeWithMaxSalary);

Вы также можете улучшить свой код, используя синтаксис ES6 (функция стрелки и foreach) вместо того, чтобы иметь вложенные циклы. [ 116]

12
задан iDeveloper 4 April 2016 в 13:13
поделиться

2 ответа

После того как Вы делаете недействительным таймер, просто звоните release на нем (принятие Вы сохранили ссылку, за которую Вы держитесь), и затем ноль Ваша ссылка. Тот путь при выходе из представления, пытаясь делать недействительным таймер во второй раз, просто назовет тот метод на ноле вместо этого, который ничего не делает.

С другой стороны, можно использовать -[NSTimer isValid] чтобы проверить, допустимо ли это перед лишением законной силы, но нет действительно никакой причины содержать на Вашу ссылку после лишения законной силы его первый раз так или иначе. Кроме того, если Ваша настоящая проблема состоит в том, что Вы не сохранили свою ссылку и так первое -invalidate на самом деле листы Вы со ссылкой, указывающей на выпущенный объект, затем звоня -isValid не поможет так или иначе.

33
ответ дан 2 December 2019 в 03:29
поделиться

То, что я обычно делаю, является нолем членская переменная содержание таймера, или когда это стреляет, или когда я делаю недействительным его. Затем можно просто сделать:

[myNSTimer invalidate]; 
myNSTimer = nil;

и это сделает правильную вещь.

6
ответ дан 2 December 2019 в 03:29
поделиться