当前位置:网站首页>【Objective-C中的@synthesize】
【Objective-C中的@synthesize】
2022-08-01 21:19:00 【清风清晨】
前言
@property只能生成getter和setter方法的声明,那实现怎么办呢?
一、@synthesize是什么?
比如,有一个类
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name;
int _age;
float _weight;
}
@property NSString *name;
@property int age;
@property float weight;
@end
@implementation Person
@end
那么,getter和setter方法的实现,能不能自动生成呢?
1)@synthesize的作用:自动生成getter和setter方法的实现。
2)语法:@synthesize @property的名称;
例如:
@interface Person : NSObject
{
int _age;
}
@property int age;
@end
----------------------
@implementation Person
@synthesize age;
@end
二、@synthesize做的事情
1.生成一个真私有的属性
1) 什么叫真私有的属性,也就是声明在@implementation之中的,
2)这个属性的类型和@synthesize对应的@property类型一致;
3)属性的名字和@synthesize对应的@property名字一致;
例如,这段代码:
@implementation Person
@synthesize age;
@end
转换为
@implementation Person
{
int age;
}
- (void)setAge:(int)age;
{
self->age = age;
} - (int)age
{
return age;
}
@end
4)自动生成setter方法的实现
实现的方式:直接把参数age的值传递给它生成的那个私有属性age;
5)自动生成getter方法的实现
实现的方式:返回它自动生成的那个私有属性的值
2.如何让@synthesize不要自动生成私有属性,就用我们自己定义的带下划线的属性,就行了
语法:@synthesize @property名称 = 已经存在的属性名;
例如:@synthesize age = _age;
那么,这句话它是什么意思呢?
1)不再生成私有属性;
2)直接生成getter和setter方法的实现;
3)setter怎么实现的呢?把参数的值赋值给已经存在的下划线属性
例如:
- (void)setAge:(int)age
{
_age = age;
}
4)getter怎么实现的呢?直接返回已经存在的下划线属性的值。
- (int)age
{
return _age;
}
总结
使用@synthesize,有几点需要注意:
1)如果直接写1个@synthesize
例如:@synthesize name;
那么,它自动生成一个私有属性,并且操作的是自动生成的私有属性
2)如果指定操作的属性
例如:@synthesize name = _name;
那么,它就不会自动生成私有属性,并且操作的是我们指定的带下划线的属性;
3)生成的setter方法实现当中,是没有做任何逻辑验证的,是直接赋值。如果要实现逻辑验证,需要自己写setter方法的实现。例如:
- (void)setAge:(int)age
{
if(age >= 0 && age <= 120)
{
_age = age;
}
else
_age = 18;
}
4)批量声明
例如:
@property float height , weight;
如果多个@property的类型是一致的,可以批量声明;
@synthesize name, age, weight, height;
@synthesize name = _name,age=_age,weight=_weight,height= _height;
@synthesize类型不一致,也是可以批量声明的。
边栏推荐
- 技能大赛训练:A部分加固题目
- C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
- C Pitfalls and Defects Chapter 7 Portability Defects 7.8 Size of Random Numbers
- 通过这两个 hook 回顾 Set/Map 基础知识
- PyTorch笔记 - Attention Is All You Need (2)
- RecycleView的使用
- ISC2022 HackingClub白帽峰会倒计时1天!最全议程正式公布!元宇宙集结,精彩绝伦!
- R语言 数据的关系探索
- 树莓派的信息显示小屏幕,显示时间、IP地址、CPU信息、内存信息(c语言),四线的i2c通信,0.96寸oled屏幕
- PyQt5 + MySQL5.8 【学生信息管理系统】【增删改查】
猜你喜欢

2022-08-01 第五小组 顾祥全 学习笔记 day25-枚举与泛型

空间数据库开源路,超图+openGauss风起禹贡

An online JVM FullGC made it impossible to sleep all night and completely crashed~

C Expert Programming Preface

磷酸化甘露糖苷修饰白蛋白纳米粒/卵白蛋白-葡聚糖纳米凝胶的

Internet使用的网络协议是什么

方舟:生存进化PVE模式和PVP模式

关于Request复用的那点破事儿。研究明白了,给你汇报一下。

技能大赛训练:A部分加固题目

网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
随机推荐
LVS负载均衡群集
[Chinese tree tags - CTB]
PyQt5 + MySQL5.8 【学生信息管理系统】【增删改查】
PyTorch笔记 - Attention Is All You Need (2)
shell脚本
C Pitfalls and Defects Chapter 7 Portability Defects 7.6 Memory Location 0
Hiking, cured my mental internal friction
30+的女性测试人面试经验分享
那些关于DOM的常见Hook封装(二)
TP5-NPs负载噻吩类化合物TP5白蛋白纳米粒/阿魏酸钠新糖牛血清蛋白纳米粒
如何让定时器在页面最小化的时候不执行?
测试的意义并不是能找到全部的缺陷
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.1 The Prehistoric Phase of the C Language
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
如何优雅的性能调优,分享一线大佬性能调优的心路历程
win10版本1803无法升级1903系统如何解决
响应式织梦模板美容整形类网站
列表页常见的 hook 封装
位运算简介
JSD-2204-Knife4j框架-处理响应结果-Day07