通过 NSMutableDictionary 释放/保留

发布于 2024-10-29 23:59:37 字数 606 浏览 1 评论 0 原文

@interface SearchViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> {

    NSMutableDictionary * results;

}

@property (nonatomic, retain) NSMutableDictionary * results;

和@synthesize结果;在 .m

这段代码会崩溃

NSMutableDictionary * md = [[NSMutableDictionary alloc] init];

results = md;

[md release];

这段代码没问题

NSMutableDictionary * md = [[NSMutableDictionary alloc] init];

results = md;

我很清楚指针没有被保留,但我不知道为什么,我做了什么吗。错了吗?

@interface SearchViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> {

    NSMutableDictionary * results;

}

@property (nonatomic, retain) NSMutableDictionary * results;

and @synthesize results; in the .m

THIS CODE WILL CRASH

NSMutableDictionary * md = [[NSMutableDictionary alloc] init];

results = md;

[md release];

THIS CODE IS OK

NSMutableDictionary * md = [[NSMutableDictionary alloc] init];

results = md;

Its clear to me that the pointer doesnt get retained, but i dont know why, did i made smth. wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天邊彩虹 2024-11-05 23:59:37

你应该使用

self.results = md

这样 md 被保留。

您可以使用点语法访问属性。通过使用点语法将某些内容分配给属性,您可以调用 setter,它会在您的情况下保留该值。如果没有点,您只需将可变字典分配给结果,就不会调用任何 setter。

您可以阅读有关 Apple 的 Objective-C 编程语言中的属性,请查看点语法段落下面的一般用途

you should use

self.results = md

so md is retained.

You access a property with the dot syntax. By assigning something to a property with the dot syntax you call the setter which retains the value in your case. Without the dot you just assign the mutable dictionary to results, no setter is called.

You can read about properties in Apple's Objective-C Programming Language, look at General Use a bit further below the Dot Syntax paragraph.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文