Я создал переменную под названием "myDBManager" в моем AppDelegate:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
MyDBManager *myDBManager;
}
@property (nonatomic, retain) MyDBManager *myDBManager;
@end
, который я использую в большинстве других классов в качестве глобальной переменной, содержащей все критически важные данные приложения. Он создается только один раз и умирает только в конце. Так, например, чтобы перейти к myDBManager в AnyOtherClass
@interface AnyOtherClass : UITableViewController {
MyDBManager *myDBManager;
NSObject *otherVar;
}
@property (nonatomic,retain) MyDBManager *myDBManager;
@property (nonatomic,retain) NSObject *otherVar;
@end
//getting the data from "global" myDBManager and putting it into local var of AnyOtherClass
- (void)viewWillAppear:(BOOL)animated {
//get the myDBManager global Object
MyAppDelegate *mainDelegate = (MyAppDelegate *)[[UIApplication sharedApplication]delegate];
myDBManager = mainDelegate.myDBManager;
}
- (void)dealloc {
[otherVar release];
//[dancesDBManager release]; DO NOT RELEASE THIS SINCE ITS USED AS A GLOBAL VARIABLE!
[super dealloc];
}
Вот мой вопрос: в то время как все другие локальные переменные AnyOtherClass, такие как «otherVar», должны быть освобождены в методе dealloc AnyOtherClass (всегда - это правильно?), Освобождение myDBManager в AnyOtherClass приводит к ошибкам в приложении ,
Поэтому я НИКОГДА не выпускаю локальную переменную myDBManager в любом классе моего приложения - все остальные локальные переменные всегда освобождаются - и она работает нормально. (Даже проверяя retainCount).
Прав ли я, что ВСЕ локальные переменные классов должны быть освобождены в результате освобождения этого класса, или это действительно нормально, чтобы вообще не освобождать эти переменные в случае использования конструкции глобальной переменной, как описано? (или любые другие случаи?)
Большое спасибо за вашу помощь!