当前位置:  开发笔记 > IOS > 正文

为什么NSString属性更改为无效值?

如何解决《为什么NSString属性更改为无效值?》经验,为你挑选了1个好方法。

当我在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更改为无效的任何建议吗?



1> Peter Hosey..:

因为你没有保留这个价值.查看" 内存管理编程指南 "中的规则,了解何时需要保留内容.

当然,正如cdespinosa所说,你可能不需要首先缓存这个路径名.它可能不是一个重要的性能杀手.首先介绍,然后优化热点.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有