当我在viewDidLoad和viewWillAppear之间移动时,我有一个属性变为无效.我不知道为什么会这样.
我有一个帮助程序类,它获取我的数据库的路径.我在app delegate中分配了这个类.RootViewController获取对appDelegate的引用,如下所示:
//inside .h file @interface RootViewController : UITableViewController{ NSArray *controllers; myAppDelegate *appDelegate; } //inside .m file @implementation RootViewController @synthesize controllers; - (void)viewDidLoad { appDelegate = [[UIApplication sharedApplication] delegate]; self.controllers = appDelegate.topicControllers; [super viewDidLoad]; }
我将鼠标移到appDelegate上以查找数据库助手类和包含数据库路径的属性:
NSPathStore2 * appDelegate.databaseHeper.databasePath "/Users/userA/Library/Application Support/iPhone Simulator/User/Applications..."
databasePath声明为NSString.为什么它改为NSPathStore2?
当我继续在调试器中发生一些其他奇怪的事情.一旦我进入viewWillAppear,属性值变为"无效",类型返回NSString.虽然我甚至在那里见过UIButton.
为什么它变为无效?我不能再使用变量了.
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //changes before this line executes }
我在viewDidLoad和viewWillAppear之间没有做任何事情.以下是在databaseHelper类中分配databasePath的方法,该类在applicationDidFinishLaunching上发生:
- (NSString *) getDBPath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); NSString *documentsDir = [paths objectAtIndex:0]; return [documentsDir stringByAppendingPathComponent:self.databaseName]; }
stringByAppendingPathComponent返回NSString.为什么我会在分配后的某个时间获得NSStorePath2?
我现在所有工作都没有问题但只是调用[databaseHelper getDBpath].我的目标是节省一些cpu周期并存储该值.因此databasePath.有关databasePath更改为无效的任何建议吗?
因为你没有保留这个价值.查看" 内存管理编程指南 "中的规则,了解何时需要保留内容.
当然,正如cdespinosa所说,你可能不需要首先缓存这个路径名.它可能不是一个重要的性能杀手.首先介绍,然后优化热点.