想问一下ios开发中内存释放后,方法调用问题
假设我定义一个UIBUTTON并给他设置了点击方法最后给他release掉确定我在屏幕点击时这个UIBUTTON对象已经释放了一直搞不懂的就是点击方法存放在哪一块内存区域...
假设我定义一个UIBUTTON 并给他设置了点击方法 最后给他release掉 确定我在屏幕点击时这个UIBUTTON 对象已经释放了 一直搞不懂的就是点击方法存放在哪一块内存区域 难道不是和UIBUTTON绑定的么 程序又是怎么判断我的点击是响应UIBUTTON事件 我不是release了么 ?
求助! 展开
求助! 展开
1个回答
展开全部
release并不代表你释放了对象,只是让对象的引用计数减1.OC采用的是引用计数管理内存,只有在对象的当前引用计数为0时候,对象才会释放。这和别的语言有点不太一样。比如:用户通过(alloc)创建对象UIBUTTON,button的引用计数加1,当前引用计数为1.你把button通过addsubview添加到某视图时候,引用计数又加1当前引用计数为2.你手动release后button的引用计数减去1,当前引用计数为1(并不是0所以没有释放),所以button并没有释放内存.
至于点击方法其实应该是以函数指针的方式保存在button对象里的,事件是和按钮绑定的。事件还在表示按钮没有释放,还有如果你在视图上看得到按钮,就表示按钮也没有释放,释放了就看不到了不是么。button对象释放了,这个点击方法自然就没了。建议去网上找下oc内存管理的黄金法则。这个都是内存管理问题,花些功夫你应该能懂的。
至于点击方法其实应该是以函数指针的方式保存在button对象里的,事件是和按钮绑定的。事件还在表示按钮没有释放,还有如果你在视图上看得到按钮,就表示按钮也没有释放,释放了就看不到了不是么。button对象释放了,这个点击方法自然就没了。建议去网上找下oc内存管理的黄金法则。这个都是内存管理问题,花些功夫你应该能懂的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询