Я добавил автоматическое отклонение с оставшимся временем, показанным в тексте положительной кнопки, к AlertDialog
.
AlertDialog dialog = new AlertDialog.Builder(getContext())
.setTitle(R.string.display_locked_title)
.setMessage(R.string.display_locked_message)
.setPositiveButton(R.string.button_dismiss, null)
.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
final Button positiveButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
final CharSequence positiveButtonText = positiveButton.getText();
new CountDownTimer(AUTO_DISMISS_MILLIS, 100) {
@Override
public void onTick(long millisUntilFinished) {
positiveButton.setText(String.format(Locale.getDefault(), "%s (%d)",
positiveButtonText,
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) + 1));
}
@Override
public void onFinish() {
dismiss();
}
}.start();
}
});
Скорее всего, причина этого в том, что утечка объекта (NSNumber) является параметром, переданным извне потока. Следовательно, эта переменная принадлежит вызывающему потоку (и его пулу автозапуска)
Причина, по которой пул автозапуска вокруг вызова потока не работает, заключается в том, что создатель потока (performSelectorInbackground) - возвращает немедленно, скорее всего, пока поток все еще работает.
Я предлагаю вам освободить параметр вашего селектора после его передачи в качестве аргумента.
Я согласен с тем, что, скорее всего, причина этого в том, что объект утечки (NSNumber) является параметром, переданным извне потока. Следовательно, эта переменная принадлежит вызывающему потоку (и его пулу автозапуска)
Вызывающий поток должен использовать NSAutoreleasePool
и я предлагаю вам добавить к параметру инструкцию сохранения:
- (void) loadViewControllerWithIndex:(NSNumber *)indexNumberObj {
NSAutoreleasePool *arPool = [[NSAutoreleasePool alloc] init];
[indexNumberObj retain];
....
[arPool release];
}