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];
0 0
原创粉丝点击