IOS_study day 05
来源:互联网 发布:新西兰羊毛被品牌知乎 编辑:程序博客网 时间:2024/06/07 04:48
今天讲了OC中的方法 类方法和实例方法的区别 设置器访问器 便利初始化 便利构造器
OC中的方法
方法:类的功能代码,在(.h)中声明,在(.m)文件中实现。语法: -|+ (返回值类型) 方法名 : 参数列表{ //方法体}减号(-)表示 实例方法,(+)表示 类方法
(void) sayHello; // 实例方法
(void) sayHelloName : (NSString *)name
Age: (NSInteger)age; //实例方法
// 类方法
注意:1.类方法可以调用类方法2.类方法不可以调用实例方法,但是类方法可以通过创建实例对象来访问实例方法3.类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量4.类方法作为消息,可以被发送到类里面去,不能发送到对象里面去
+(void)hiGuys{
//1.类方法可以调用类方法
//self 是什么玩意?
self 代表当前对象的指针
[self sayHi];//2.类方法不可以调用实例方法,但是类方法可以通过创建实例对象来访问实例方法
Person *person = [Person new];
[person sayHello];//3.类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量
//NSLog(@”name : %@, age : %ld , hobby : %@”,_name,_age,_hobby);//4.类方法作为消息,可以被发送到类里面去,不能发送到对象里面去
}
设置器
- -|+ (void) setName : (NSString *)name;
访问器
- (NSString *)name;
设置器和访问器的作用;
1.隐藏了实例变量
2.控制实例变量的读写
3.做正确性校验
设置器(setter)和访问器(getter)的命名规则1.设置器:- (void) set首字母大写的实例变量 : (实例变量的返回值类型) 去掉下划线的实例变量名2.访问器:- (实例变量的返回值类型)去掉下划线的实例变量名getter 和 setter 的好处:1.在 setter 中可以加入合法性检查,比如设置颜色的函数中,对于RGB颜色要判断其值在0~255之间。2. 更新与被设置变量相关的其它变量的值,比如在一个潜水艇模拟系统中,改变了其水下深度时,要相应的更新所受压强。3.在debug时,可以在其中,尤其是在setter中加入追踪log。4.在多线程环境中,如果要保护对象的并发访问,则必须在getter/setter中加入同步锁。note:对于类的名称,其首写字母大写对于变量,其首写字母小写遵循驼峰命名规则
便利初始化函数
注意命名规范:init开头
*/
-(id)initWithName:(NSString *)name
Age:(NSInteger)age;
/*
便利构造器
便利构造器只不过是把对象分配内存 和 调用便利初始化函数初始化对象的代码封装
起来,让用户使用起来更加方便
*/
(id) teacherWithName:(NSString *)name
Age:(NSInteger)age;id:返回的类型是id数据类型,它是动态数据类型,可以指向任何类的对象,而不关心其具体类型,在运行时检查其具体类型,可以对其发送任何(存在的)消息。self:指当前对象的指针super:指向父类对象的指针,子类使用super发送消息的时候,实际上就是告诉子类调用父类的方法。如果父类没有调用该方法,则继续在继承链上查找,直到寻找到位置,如果找到NSObject的位置还没找到,就会报错.
-(id)init{
if(self = [super init]){ _name=@"Leee"; _age=22;}return self;
}
-(id)initWithName:(NSString *)name
Age:(NSInteger)age{
if (self = [super init]){ _name = name; _age = age;}return self;
}
+(id)teacherWithName:(NSString *)name
Age:(NSInteger)age{
Teacher *teacher = [[Teacher alloc]initWithName:name Age:age];return teacher;
}
在main函数中的书写:
Person *per = [Person new]; [per sayHello]; [per sayHelloName:@"Leee" Age:111]; [Person sayHi]; [Person hiGuys]; Student *stu = [Student new]; [stu setName:@"Lee"]; [stu setAge:22]; [stu setHobby:@"PLAY LOL"]; NSString *name = [stu name]; NSInteger age = [stu age]; NSString *hobby =[stu hobby]; NSLog(@"name = %@,age = %ld,hobby = %@",name,age,hobby); Teacher *tea = [[Teacher alloc]init]; [tea sayWord]; Teacher *teach1 = [[Teacher alloc]initWithName:@"爸爸" Age:22]; [teach1 sayWord]; Teacher *teacher2 = [Teacher teacherWithName:@"1" Age:22]; [teacher2 sayWord];
- IOS_study day 05
- IOS_study day 01
- IOS_study day 02
- IOS_study day 03
- IOS_study day 04
- day-05
- Nacues day by day 05
- 开发日志-05day
- Day 05 JSP基本知识
- day
- day\\\
- JAVA SE — Day 05
- day day day upupupup
- Java study 05day--面向对象
- Java study 05day-this关键字
- php third day 数组相关 013.07.05
- 05day 文字显示 GDT/IDT初始化
- [2016/06/27] LeetCode / Java - Day 05 -
- java面向对象编程的4个特征以及重写重载的区别
- 获取路径
- 一步一步走进Linux HOOK API(五)
- css定位
- 运行在yarn上的spark job使用log4j无法记录日志问题
- IOS_study day 05
- QEMU虚拟机关键源代码学习
- ubuntu nfs 开发板
- 关于学习jackson
- JQuery去掉字符串两边的空格
- IDLDrawWidaget Activex
- 一步一步走进Linux HOOK API(六)
- 作者的独白白
- RocketMQ与Kafka对比(18项差异)