美文网首页
OC 类、对象的创建和使用

OC 类、对象的创建和使用

作者: 李琪_59dc | 来源:发表于2017-09-19 22:27 被阅读0次

    OOP面向对象编程 Object-Oriented Programming


    什么是对象?对象是对客观事物的抽象和封装(特征数据+行为方法)
    什么是类?类是对对象的抽象,是一种抽象的数据类型。
    对象是类的实例,类是对象的模版。

    一、function 函数

    void drawShapes(id shapes[], int count){
        for(int i=0 ; i<count ; i++){
            id shape = shapes[i];
                [shape draw];
        }
    }//drawShapes
    
    • 不在类里面,不能声明方法,只能声明C语言里的函数。
    • oc中[ ]意义:用于通知某个对象该去做什么(消息机制)
      第一项是对象,其余部分是需要对象执行的操作(即发送消息/调用方法)。
      具体过程:对象是消息的目标,先查出它属于哪一个类,再找到相应函数执行。

    二、 interface接口 -> 类的声明

    1. 接口是类为对象提供的特性描述。
    2. 基本数据类型
      NSInteger整型
      NSUInteger无符号整数
      NSString字符串
      NSString* 指针类型 赋值str=@“123”
      CGFloat 小数 来自CoreGraphics框架
    3. 类声明写法:
    @interface Person:NSObject{     //@interface标志,NSObject表示类的继承
        NSInteger _age;      //数据成员,实例变量
        NSString* _name;
    }
    //声明类的功能,类给外部提供的功能,不表示是类的全部功能。对业务逻辑进行保护
    -(void) setName: (NSString*) name;   //-方法声明 (void)方法返回类型 参数
    -(NSString*) name;
    @end //Person
    
    • OC方法可以返回与C函数相同的类型:标准类型(整型、浮点型和字符串)、指针、引用对象和结构体。
    • 中缀符语法技术
      【类声明语法】 + / - (返回类型) 名字1:(类型1)参数1 名字2:(类型2)参数2 …..
      • +类型方法 [类名 类型方法]
      • -实例方法 [对象 实例方法]
        -(void)setInitX:(int)n andSetInitY:(int)d;
      
      • 例子中在第二个参数前面设置一个中缀符(andSetInitY),中缀符也是函数名的一部分。
      • 中缀符解决了方法调用时的代码可读性问题
        【调用】[test setInitX:1 andSetInitY:2];
      • 若在Java中则会写成public void setInit(int n, int d);
        Java和OC二种语法比较起来就好像是数学中的分配率:a(b+c) = ab+ac
      • 最后用表格来对比一下C和OC
    比较项目 C OC
    无参数 int foo(); -(int)foo;
    int ret= obj->foo(); int ret = [obj foo];
    一个参数 int foo(int a); -(int)foo:(int)a;
    int ret = obj->foo(100); int ret = [obj foo:100];
    两个参数 int foo(int a,int b); -(int) foo:(int)a :(int)b;
    int ret = obj->foo(10,20); int ret = [obj foo:10 :20];
    带标签 int fooAndB(int a, int b); -(int)foo:(int)a andB:(int)b;
    int ret = obj->fooAndB(10,2); int ret = [obj foo:10 andB:2];

    三、implementation -> 类的实现

    1. 实现是使接口能正常工作的代码
    @implementation Person
    -(void) setName: (NSString*) name {  
    //参数要重新命名,不能与成员变量同名,否则会覆盖初始变量
        _name=name;
    }
    -(NSString*)name{
        return _name;
    }
    

    四、对象的创建

    1. 分配内存+初始化 (具体在下一篇构造方法中展开介绍)
      OC的对象都是动态分配在堆中,只能通过指针访问
    2. 消息机制 【接受者 消息 (方法)】
      【对象 对象方法】;
      【类名 类型方法】;
    int main(int argc, const char *argv[])
    {
        Shape* shape1 = [Shape new ]; //自动调用的方法
        Shape* shape2 = [ [Shape alloc] init ]; //与上一行等价,但二者指向不同地址
        return (0);
    }
    
    1. 对象创建使用结束后需要释放内存
      • ARC (Automatic Reference Counting) 自动引用计数,释放没有指针再指向的内存块
      • MRC (Mannul Reference Counting) 手动管理,向对象发送release消息 [shape release];

    五、getter/setter方法

    @interface Person : NSObject{
        NSString* _name;
        NSInteger _age;
    }
    //声明类的功能,类给外部提供的功能
    -(void)setName:(NSString*)name;  //setter方法声明
    -(NSString*)name;  //getter方法声明
    @end
    
    @implementation Person
    -(void)setName:(NSString *)name{      // setter方法实现,将参数name的值赋给成员变量_name
        _name=name;
    }
    -(NSString*)name{       // getter方法的实现,获取当前对象成员变量_name的值
        return _name;
    }
    @end
    

    相关文章

      网友评论

          本文标题:OC 类、对象的创建和使用

          本文链接:https://www.haomeiwen.com/subject/khwgsxtx.html