Как сказал Марк, обычная практика в Какао состоит в том, чтобы делегаты были "слабыми" звеньями. То есть они не сохраняются. Именно делегат должен гарантировать, что когда он больше не сможет отвечать как delagate, ничего плохого не случится - либо установив делегат равным nil, либо освободив исходный объект (при условии, что он является единственным владельцем и будет немедленно освобожден) .
Так что в вашем примере, если classB остается после окончания launchSomething, то вы, вероятно, сохранили его в ivar. Ваша процедура деллок для класса А будет иметь либо
[classB setCallback:nil]; // optionally withSelector:@selector(none)
и / или
[classB release];
Если у classB могут быть другие владельцы, вам определенно следует использовать setCallback: nil, но часто вы знаете, что являетесь единственным владельцем.
Ситуация усложняется, когда задействованы представления и окна, поскольку может быть сложно обеспечить освобождение объектов заказа и что никто другой не имеет сильной связи с классом B, и в этом случае очистка обратного вызова необходима.
То же самое относится к наблюдателям и уведомлениям, которые, как правило, являются слабыми звеньями и поэтому должны быть очищены в вашей процедуре dealloc.