oc-30-堆栈

简介:
复制代码
/**
 操作引用计数器的方式:每个对象内部(对象的堆内存里面)都有一个引用计数器变量,表示对象被引用的次数。
 1:retainCount:获得对象的引用计数器的值
 2:retain:能够让对象的计数器值变量+1,要想计数器变量加1就要调用对象的retain方法
 3:release:让对象的计数器变量值 - 1,要想计数器变量减1就要调用对象的release方法
 
 怎么判断对象被释放?
 dealloc方法:只要调用了这个方法,就代表对象即将被释放.
 
 僵尸对象:已经被释放的对象,堆空间已经释放的对象。
 野指针:指向僵尸对象的指针
 空指针:指向nil的指针,给空指针发送消息(调用方法)不会报任何错误.
 内存泄露:程序结束了,堆对象内存没有释放。
 */
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p = [[Person alloc] init]; //1
        [p retain]; // 让对象引用计数器值 +1 // 2
        [p retain]; // 3
        [p release]; // 减-1 // 2
        [p release];
        [p release]; // 对象被释放
        NSLog(@"%lu",h.retainCount);//如果正常空间被回收这句话无法输出。
        p = nil; // 给空指针发送消息,不会报任何错误,后面调用方法也不会出错。
        [p release]; // p就是野指针,想要操作Person这个僵尸对象
        
//
    }
    return 0;
}



//
//Person.h
 #import <Foundation/Foundation.h>
 @interface Person : NSObject
 @end
 
//Person.m
 #import "Person.h"
 @implementation Person
 - (void)dealloc
 {
 NSLog(@"人被释放啦不要再做其他的事来");
 // 必须调回父类的dealloc方法
 [super dealloc];
 }
 @end
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5314461.html,如需转载请自行联系原作者

相关文章
|
监控 网络协议 安全
使用 Scapy 库编写 TCP RST 脚本
使用 Scapy 库编写 TCP RST 脚本
华为机试HJ17:坐标移动
华为机试HJ17:坐标移动
129 0
|
视频直播
开发拍卖APP直播系统源码,十大应用场景
“东莞梦幻网络科技”开发拍卖直播系统源码是一种基于网络技术的应用,允许卖家在实时视频流中展示拍卖品,同时允许潜在买家在线出价竞拍。这一系统的核心是源码,它包括了拍卖直播平台的基本功能,如用户注册、拍卖品管理、商城、出价、支付、物流、和交付等。
|
存储 算法 Java
超硬核讲解数据结构与算法之线性表(二)
超硬核讲解数据结构与算法之线性表
134 0
超硬核讲解数据结构与算法之线性表(二)
|
JavaScript 前端开发
kettle job通过javascript进行循环控制
任何一种编程语言都少不了循环,kettle中的job也一样。那么kettle中的job是怎么通过JavaScript来达到类似于编程语言中的for循环呢? var max = parent_job.
1619 0
|
6天前
|
人工智能 运维 安全
|
4天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
565 20