Если вы хотите быть действительно запутанным в этом, вы могли бы полагаться на знание, что пул авто-релиза истощается в конце цикла событий, и создавать класс, который переопределяет -retain и -release, и когда счет сохранения (для которого я бы порекомендовал ивар) достигнет нуля, установите флаг, снова увеличьте счет сохранения до единицы и каким-то образом получите его в следующем пуле автоматического выпуска, который будет создан для нового цикла событий. В начале каждого метода, который вы хотите, чтобы убедиться, что он происходит только перед какой-то строкой кода, проверьте, установлен ли флаг в классе, переопределяющем -retain / release, и, если это не так, break / throw error / log / etc. (Макрос, вероятно, приведет к сокращению кода, и вы можете условно определить его для отладочных сборок.) Затем, сразу после строки, которую вы хотите гарантировать, что ни один из ваших кодов не появится после, сбросьте флаг. Таким образом, любой код, который вводится после этой строки, увидит флаг сброса и войдет в систему / потерпит неудачу / расскажет вам об этом, и флаг будет сброшен после каждого цикла событий.
Некоторые другие вещи: Вы должны либо определить + retain / + release, и добавить объект класса в пул автоматического выпуска с помощью + [NSAutoreleasePool addObject:], либо сделать его одноэлементным объектом, поскольку флаг должен быть доступен без действительно хочет передать этот объект. Во-вторых, я, кажется, пренебрегал тем, как вставить класс / синглтон в пул авто-релиза для следующего цикла, после того как этот цикл опустошен. Это потому, что это самая сложная часть, и я понятия не имею, но у меня есть чувство , что [self performSelector:@selector(autorelease) afterDelay:0]
сработает.