加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 我需要在dealloc中释放吗?

发布时间:2020-12-16 10:27:16 所属栏目:百科 来源:网络整理
导读:在我正在研究iPhone开发的书中,他们使用Interface Builder来使用IBOutlet实例.一个例子是UIButton.所以他们在结构中添加了这样的东西: IBOutlet UIButton *whateverButton; 然后他们为.h中的每一个添加@property,在.m中添加@synthesize. 然后他们在.m的deal
在我正在研究iPhone开发的书中,他们使用Interface Builder来使用IBOutlet实例.一个例子是UIButton.所以他们在结构中添加了这样的东西:

IBOutlet UIButton *whateverButton;

然后他们为.h中的每一个添加@property,在.m中添加@synthesize.

然后他们在.m的dealloc中包含一个版本.两个问题:

>是否需要发布?是不是所有属性都已自动处理?
>为了调试目的,我如何检查引用计数以查看发生的情况……?

解决方法

Is the release necessary? Aren’t all
properties already handled
automatically?

如果保留该属性,则必须释放.当你声明一个@property和@synthesize它时,你得到的就是访问器,dealloc中没有特殊的自动行为.

此外,IBOutlet没有任何神奇之处 – 它只是Interface Builder的标记,可以查看您希望在IB中显示哪些属性.它只是一个空的宏,Cmd-单击IBOutlet关键字以查看其定义:

#ifndef IBOutlet
#define IBOutlet
#endif

同样的事情也适用于IBAction,它扩展到无效.

How can I check the ref count to see
what’s happening,for debug
purposes…?

当我需要调试内存管理时,我通常只是在dealloc方法中设置一个断点或在那里记录一个字符串.将一个对象的retainCount记录在可能与它有关的调用周围也很有帮助.

查看@synthesize指令如何创建访问器也可能有所帮助.当你声明一个保留的@property并要求编译器@synthesize它们时,你会得到这样的结果:

@property(retain) NSString *foo;
@synthesize foo;

- (void) foo {
    return foo;
}

- (void) setFoo: (NSString*) newFoo {
    // Try to think what would happen if this condition wasn’t
    // here and somebody called [anObject setFoo:anObject.foo].
    if (newFoo == foo)
        return;
    [foo release];
    foo = [newFoo retain];
}

这不完全是事情,但它足够接近.现在应该更清楚为什么你应该释放dealloc.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读