【OC语言】第三篇·类方法的使用、匿名类以及封装

一、类方法
    1. 概述:
       1)实例方法就是一个方法,它在类的是实例范围内执行。即:在调用实例方法前,必须创建一个类的实例。
      2)类方法不需要创建实例。
      3)+表示类方法,就是类调用方法,不依赖任何对象的方法。-表示是实例方法。
    2. 类方法调用
        [类名称 类方法名称];
    3. 注意事项
      1)实例方法和类方法同名
      2)类方法可以从父方法继承而来,子类可以重写类方法。
      3)类方法和实例方法一样在interface里声明,在implementation 里实现
      4)类方法只能被向类方法发送消息才被执行,向实例对象发送类方法是不能被执行的
      5)在类方法是使用了self,这个self执行的类对象class object 而不是实例对象instance object
    4. 类方法的优点
                1)节省内存空间               2)提供效率             3)作为工具方法
    5. 类方法易犯错误: 类方法中不能访问类的成员变量
    6. 类方法和对象方法比较:
      1)对象方法(实例方法):
                  以 - 号开头
                  可以使用成员变量
                  用对象调用对象方法(可以直接调用类方法)
                  对象方法可以调用当前对象或者其它对象的方法(是通过将对象作为参数传入方法)
           对象方法中可以调用其它对象方法:
            (1)当前对象方法中,可以创建对象(可以是当前类实例对象,也可以是其它类实例对象),使用新创建的对象调用对象方法。
            (2)可以使用self
            (3)对象作为方法参数传递过来,可以使用传递过来的对象调用方法
      2)类方法:
                  以+号开头
                   在类方法中可以调用对象方法(不能直接调用对象方法)
                     (1)对象作为方法参数传递过来
                     (2)可以创建一个对象
                  类方法可以调用其它类方法,但是类方法不能调用自身(调用自身会形成死循环)
      3)示例程序:简单计算器
类的声明

+(void)add:(int)num1 and:(int)num2; //两数相加 +(void)sub:(int)num1 and:(int)num2; //两数相减 +(void)mul:(int)num1 and:(int)num2; //两数相乘 +(void)div:(int)num1 nad:(int)num2; //两数相除

类的实现

#import "Calculator.h" @implementation Calculator +(void)add:(int)num1 and:(int)num2 //两数相加 { NSLog(@"%d + %d = %d",num1,num2,num1+num2); } +(void)sub:(int)num1 and:(int)num2//两数相减 { NSLog(@"%d - %d = %d",num1,num2,num1-num2); } +(void)mul:(int)num1 and:(int)num2 //两数相乘 { NSLog(@"%d * %d = %d",num1,num2,num1*num2); } +(void)div:(int)num1 and:(int)num2//两数相除 { NSLog(@"%d / %d = %.2f",num1,num2,(float)num1/num2); } @end

主函数

#import <Foundation/Foundation.h> #import "Calculator.h" int main(int argc, const char * argv[]) { @autoreleasepool { [Calculator add:10 and:20]; [Calculator sub:10 and:2]; [Calculator mul:10 and:3]; [Calculator div:25 and:5]; } return 0; }

运行结果

 
二、匿名类
    1. 用[Car new]  ( [[ Car alloc ] init ] )分配给Car类一个实例空间
    2. 使用方法:
      1)使用匿名类访问实例变量,可以访问该匿名实例,但是只能访问一次。以后访问,会新建一个实例空间。
      2)使用匿名类可以调用方法。
    3. 匿名类的优缺点
        优点:可以简化代码,方便方法调用。
        缺点:匿名对象实例化以后,只能正确的使用成员变量一次。

三、封装
    1. 将数据隐藏起来,只能用此类的方法函数才可以访问或者设置数据,不可被外部任意修改,是面向对象设计的本质。降低了数据无用的可能性。
    2. 封装的步骤
      1)setter方法(设置器):在set方法的内部可以对一些不合理的数据过滤筛选。set方法作用:为提供一个设置成员变量值的方法。
            命名规范:
                (1)方法名必须以set开头
                (2)set后面跟上成员变量的名称,首字母大写
                (3)返回值一定是void
                (4)一定要接受一个参数,而且参数类型需要和成员变量的类型一致
                (5)形参名不能和变量名一样(成员变量名以_线开头)
           好处:
                (1)不让数据暴露在外,保证了数据的安全性
                (2)对设置的数据进行过滤
      2)getter方法(访问器)
            作用:为调用者返回对象内部的成员变量
            命名规范:
                (1)一定有返回值,返回值的类型和成员变量的类型一致
                (2)方法名和去掉下划线的成员变量名一样
                (3)不需要接收任何参数     
      3)示例程序
类声明

typedef enum{kSexFemale,kSexMale} Sex; @interface Person : NSObject { NSString *_name; //姓名 Sex _sex; //性别 int _age; //年龄 float _height; //身高 } //设置成员变量的值 -(void) setName:(NSString *)name; -(void) setSex:(Sex)sex; -(void) setAge:(int)age; -(void) setHeight:(float)height; //访问成员变量的值 -(NSString *)name; -(Sex)sex; -(int)age; -(float)height; @end

set

-(void) setName:(NSString *)name{ _name = name; } -(void) setSex:(Sex)sex{ _sex = sex; } -(void) setAge:(int)age{ _age = age; } -(void) setHeight:(float)height{ _height = height; }

get

-(NSString *)name{ return _name; } -(Sex)sex{ return _sex; } -(int)age{ return _age; } -(float)height{ return _height; } @end


四、依赖关系
    1. 概念:A对象作为B对象的局部变量或是方法形参的,B依赖与A,这时候我们称A与B存在一种依赖关系。
    2. 耦合度:当修改一个对象的时候,对另外一个对象的影响程度。
    3. 低耦合:当修改一个对象,对其它对象影响比较小。
    4. 高内聚:一个对象仅仅做自己相关的事情。
    5. 面向对象设计原则:单一职责原则。

五、关联关系
    1. HasA关系:当一个对象拥有另外一个对象的时候,当B对象为A对象成员变量的时候,B对象与A对象之间存在一种关联关系。
    2. 关联关系的耦合度高于依赖关系。
    3. 关联关系是面向对象中最常用的一种关系。 

六、static关键字
    1. 在变量声明前加上关键字static,可以使局部变量保留多次调用一个方法所得的值。
    2. 变量为静态变量,位于程序的全局数据区。
    3. 变量为全局变量,可将声明放在实现文件(.m)的开始部分。
    4. 使用static修饰实例变量是不被允许的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值