gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:50:24 25 4
gpt4 key购买 nike

当我在 viewDidLoad 和 viewWillAppear 之间移动时,我有一个属性变为无效。我不知道为什么会这样。

我有一个帮助程序类可以获取我的数据库的路径。我在应用程序委托(delegate)中分配此类。 RootViewController 像这样获取对 appDelegate 的引用:

//inside .h file
@interface RootViewController : UITableViewController
<UITableViewDelegate, UITableViewDataSource>{
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。

为什么会变为invalid?我不能再使用该变量。

- (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 更改为无效吗?

最佳答案

因为你没有保留值。查看 Memory Management Programming Guide 中的规则查看何时需要保留某些内容。

当然,正如 cdespinosa 指出的那样,您可能一开始就不需要缓存此路径名。它可能不是一个很大的性能 killer 。首先分析,然后优化热点。

关于iphone - 为什么 NSString 属性更改为无效值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/717385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com