setter和getter内存处理

2024-05-28 10:18
文章标签 内存 处理 getter setter

本文主要是介绍setter和getter内存处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Person.m

#import "Person.h"@implementation Person
//析构函数
- (void)dealloc {//调用 任何之前不能写在[super dealloc];因为它已经把所有的都销毁的NSLog(@"Person dealloced.");//释放所有当前对象所持有的对象成员变量[_name release];[_score release];[super dealloc];
}
//构造函数
- (id)initWithName:(NSString *)name score:(NSArray *)score{self = [super init];if (self) {_name = name;_score = score;}return self;
}- (void)setName:(NSString *)name{//释放旧的对象release,持有新的对象retain//为了避免相同对象赋值之后造成的对象以外释放,需要判断对象是否相同if (_name != name) {[_name release];_name = [name retain];}/*[name retain];[_name release];_name = name;*/}
-(NSString *)name{return _name;
}
- (void)setScore:(NSArray *)score{if (_score != score) {[_score release];_score = [score retain];}}
- (NSArray *)score{return _score;
}
@end

main.m

  /*Cocoa内存管理规则*//*5个堆:需要的时候分配内存,不需要的时候手动释放,编译器不负责释放该区域的内存空间栈:需要的时候分配内存,不需要的时候自动释放,编译器负责释放该区域的内存空间全局/静态存储区 :存储全局变量和静态变量常量存储区:存储常量,不可变的数据自由存储区:*///1.使用alloc ,new,copy,mutableCopy生成的对象,对象出事引用计数值为1,需要手动释放内存(堆上的对象);//2.非以上四个方法生成的对象(便利初始化)对象初始化引用计数值为1,并且设置为自动释放的,无需手动释放(栈上的对象);//3.使用retain持有的对象,需要保证retain和 release次数相等/*setter和getter内存处理*/Person *person = [[Person alloc]init];NSArray *score = [[NSArray alloc]initWithObjects:@"3", nil];NSLog(@"score =%lu",[score retainCount]);[person setScore:score];NSLog(@"score =%lu",[score retainCount]);[score release];//如果不release内存泄露NSLog(@"score = %lu",[score retainCount]);


这篇关于setter和getter内存处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010281

相关文章

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J