首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以释放一个为nil的指针?

是否可以释放一个为nil的指针?
EN

Stack Overflow用户
提问于 2009-10-01 04:31:56
回答 4查看 4.3K关注 0票数 8

如果我创建了一个包含两个对象指针(见下文)的新对象,则在创建该对象时,指针将被设置为nil;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@interface rocketShip : NSObject {
    NSString *name; 
    NSNumber *thrust;
}

如果(由于一些意想不到的原因)我没有分配这些指针,然后在我的dealloc方法中释放它们,我很确定它是可以的,只是想检查一下?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)dealloc{
    [name release];
    name = nil;
    [thrust release];
    thrust = nil;
    [super dealloc];
}

加里

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-01 04:36:41

向nil发送消息不会导致错误,所以这没问题。不过,您需要确保指针实际上是空的--向垃圾指针发送消息可能会导致错误。

票数 23
EN

Stack Overflow用户

发布于 2009-10-01 04:37:22

是的,您可以这样做,因为您可以安全地向nil发送消息(例如release),而它不会做任何事情。

票数 8
EN

Stack Overflow用户

发布于 2009-10-01 04:50:46

如果使用访问器属性创建get/set方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@interface rocketShip : NSObject {
    NSString *name; 
    NSNumber *thrust;
}

@property (retain, nonatomic) NSString *name;
@property (retain, nonatomic) NSNumber *thrust;

在您的.m文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@synthesize name;
@synthesize thrust;

然后,您可以在dealloc中将变量设置为nil。这实际上会调用你的setter,并将引用计数减一,然后清理掉所有东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1503680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文