属性:快速生成setter和getter
属性也包括:声明和实现
1.属性的声明写在.h中
格式:@property 数据类型 变量名;
如果实例变量一致的时候,属性的声明可以合并,每一个属性之间使用,分隔
2属性的实现写在.m中
格式:@synthesize 数据类型 变量名;
Xcode5.0之后,属性的实现部分也不需要写了
当你同时重写setter和getter时,系统就不会再自动生成@synthesize name=_name;
属性的优化
1.声明的时候同一种数据类型可以合并
2.实例变量可以省略(系统自动添加)
3.属性的实现可以省略
--------------------------------------------------------------------------------------------------------
属性的属性(默认是readwrite)
写在.h文件@property后的()中 如:@property(属性)
读写组:
用来控制setter和getter的实现
readwrite 可读可写 自动生成setter和getter
readonly 只读 自动生成getter
重名组:
用来为setter和getter重命名
setter为set方法重命名 setter=方法名
getter为get方法重命名 getter=方法名
//重写set方法的方法名时,要加:
//如果一个属性是BOOL类型,要对getter方法重命名
原子性(默认atomic):
atomic:原子性,同一时刻时,只能使用setter或者getter(只能用其一),单线程比较安全,但效率比较低
nonatamic:非原子性,多线程不安全,但效率高
//当你重写setter和getter时,需要把原子修饰符改为nonatomic
内存管理组(默认是assign)
assign默认,操作非对象类型(基本数据类型)
retain 操作对象类型
copy 操作对象类型,对象要遵循NSCopying
//NSString 属性一般使用copy
点语法 .
如:
girl.name=@"黄图哥'; //等于[girl setName=@"黄图哥"];
girl.name; //相当于[girl name];
当.语法后面跟着=,相当于setter
当.语法后面什么都没有跟,相当与getter
注意:只有当实例变量拥有setter和getter时,才能使用.语法
--------------------------------------------------------------------------------
KVC
key-value-coding 键值编码,使用间接访问实例变量的方法
使用KVC访问 name
通过KVC中key去类中找实例变量,先判断有没有实例变量name,如果没有再去找_name,有就访问即可.
即使实例变量没有setter和getter,也能通过KVC为实例变量赋值和取值.
为了避免通过KVC编码的赋值和取值因为没有key值(不存在实例变量),出现程序奔溃(crash),需要在所在类的.m文件中,重写setValue和valueForUndefinedKey
使用:
[对象名 setValue:(id) forKey:(NSString *)]
[对象名 valueForKey:(NSString *)];
版权声明:本文为博主原创文章,未经博主允许不得转载。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探