zoukankan      html  css  js  c++  java
  • OC语言(二)

    十.匿名对象

    即不将对象赋给指针,而是直接使用

    注意new对象的时候要用[ ]嵌套

    例如:[[Car new] run];


    十一.枚举书写规范

    注意空格

    //注视
    typedef enum {


    } XXX;

    十二.面向对象三大特性之封装

    封装、继承、多态

    封装(成员变量的封装)
    阻止用户随意访问和修改成员变量,将成员变量设为私有,用函数来作为修改和查看的入口。
    规范:
    set方法:对输入进行过滤,对对象内部的成员变量进行设置。
    命名:set + 成员变量名称,且后者首字母大写,返回值一定要是void,形参不能跟成员变量名称一致,可以在前面+new.
    如果成员变量使用下划线开头,则不必再加new
    get方法:返回对象内部的成员变量。
    命名:方法名同成员变量名一致,不需要接收任何参数。

    对于只读的成员变量,只提供get方法


    因为get方法常常和成员变量名相同,所以将成员变量以下划线开头,get方法不带下划线。


    下划线开头的一定是成员变量


    #import <Foundation/Foundation.h>


    @interface Student : NSObject {

        int _age;

    }


    - (void)study;

    - (void)setAge : (int)newAge;

    - (int)age;


    @end


    @implementation Student


    - (void)study{

        NSLog(@"%d岁的学生在学习",_age);

    }


    - (void)setAge : (int)age{

        if (age <= 0){

            age = 1;

        }

        _age = age;

    }


    - (int)age{

        return _age;

    }


    @end


    int main(){


        Student *stu = [Student new];

        [stu setAge : -15];

        NSLog(@"学生现在%d",[stu age]);

        [stu study];

        

    }


    十三.弱语法


    是用一个对象并不存在的方法,编译和链接均只是警告,而不是报错。

    报错:

    'NSInvalidArgumentException', reason: '-[Person test]: unrecognized selector sent to instance 0x7faf28c0cc50'

    给对象Person发送了一个不能识别的消息test.


    OC的方法是动态检测,在运行过程中才会检测对象有没有实现相应的方法。


    声明(interface)是可以不写的,可以直接写实现并且继承NSObject(在main以前才可执行),但是实际中不这么写。


    十四.类方法

    与之对应的是对象方法。

    类方法以+开头,由于不用创建对象,直接从类的存储空间执行,可以提升性能。

    只能由类调用。允许类方法与对象方法同名,类方法内不能访问成员变量。

    类方法的好处:不依赖于对象,执行效率高,能用类方法尽量用类方法。

    要防止死循环(无限递归)。

    十五.self关键字


    self是一个指针,指向方法调用者。
    如self->_age来访问成员变量。
    或者[self <method>]在类内执行方法。

    注意,在类方法内也可以使用self!!!,这时候self代表类

    注意事项:
    也要防止死循环(无限递归)。注意分析self指向的是对象还是类。
    谁调用了当前方法,self就指向谁 。

    十六.面向对象三大特性之继承

    被继承的类称为父类(super),继承别人的类称为子类。

    使用 : 来继承,由于默认的访问参数为protected,因此可以被全部继承。

    例如NSObject是根类,包含了创建对象等方法。

    特殊:NSProxy不是继承自NSObject,它也是一个根类。

    注意事项:
    父类必须声明在子类之前。
    不允许子类和父类具有想通名称的成员变量。
    调用对象,优先去对象所在的类找,找不到再去父类找。(每个类内都有superclass指针,也有isa指针指向类的存储空间)

    继承的缺点:耦合性太强。

    区分组合和继承:
    例如Student要有Score的属性,应该把Score作为Student的一个成员变量  xxx拥有xx。
    如果Dog要有Animal的属性,应该让Dog继承Animal。 xxx是xx。

    访问父类,使用super。既可以访问对象方法,也可以调用类方法。
    super处于对象(类)方法中,就会调用父类的对象(类)方法。

    常见场景:
    常常是在子类重写的方法中再调用父类的方法。

    十七.面向对象三大特性多态

    多态:父类指针指向子类对象。

    例如Dog类继承了Animal类
    Animal *a = [Dog new];

    假设Animal和Dog都有eat方法

    [a eat];调用的是子类Dog的方法,会动态检测a指针指向的对象是什么类型,会调用真实类型的方法。

    由于NSObject是根类,甚至可以使用NSObject *n = [Dog new];

    多态的好处:
    例如有feed方法用来喂动物,传入Animal指针,这样就可以处理各种继承子Animal的对象。
    void feed(Animal *a){
    [a eat];
    }

    多态的局限性:
    父类类型的指针变量不能用来调用子类方法(可以调用成功,但是语法不规范),如果一定要调用,先进行类型转换。
        
    十八.NSString

    创建字符串:
    NSString *str = @“string”;
    输出字符串用%@:
    NSLog(@“xxx%@“,str);

    创建字符串的另一种方式
    str = [NSString stringWithFormat : @“xxxxxx %d”, <var>];




  • 相关阅读:
    通讯录封装实现
    简单通讯录的实现 main..h .m文件全部
    iOS 开发 OC编程 字典和集合 排序方法
    iOS 开发 OC编程 数组冒泡排序.图书管理
    iOS 开发 OC编程 属性和字符串练习
    iOS 开发 OC编程 属性和字符串
    iOS 开发 OC编程 便利构造器以及初始化方法
    iOS 开发 OC编程 方法的书写
    IOS 开发 OC编程 类和对象
    iOS 开发 c语言阶段考试题
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154257.html
Copyright © 2011-2022 走看看