Objective-C 学习第四天

本文介绍了Objective-C中的Xcode文档安装方式、static关键字的作用、self关键字的含义及其使用场景,以及super关键字的功能。此外,还详细讲解了继承的概念、访问修饰符的使用规则和多态的表现形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、

  1. Xcode文档的安装
    1). Xcode文档提供了很多框架, 框架当中有很多类和函数, 提供的一些数据类型.
    2). Xcode文档需要单独安装.
    a. 在线安装: Xcode-> Preferences...->Downloads->Xcode文档
    b. 离线安装:
    路径:/Applications/Xcode.app/Contents/Developer/Documentation/DocSets/
    点击Window->Documentation and API Reference.

  2. static 关键字
    1). C语言中的static
    a. 修饰局部变量: 把局部变量变成静态变量
    b. 修饰全局变量
    c. 修饰函数
    2). OC中的static
    a. static不能修饰属性也不能修饰方法
    b. 可以修饰方法中的局部变量
    如果方法中的局部变量被static修饰, 这个变量就会被变成静态变量.存储在常量区

  3. self关键字
    1). 方法的内部可以定义一个与类属性相同的变量, 这个时候如果在方法中访问这个同名的变量, 则访问的是局部变量.
    2). self: 自己的.
    和Java、C#中的this关键字有点像.
    可以在对象方法和类方法中使用.
    self是1个指针, 在对象方法中self指向当前对象, 在类方法中self指向当前类.
    3). self用在对象方法中
    a. self在对象方法中, 指向当前对象
    b. 可以使用self显示的调用当前对象的属性
    c. 可以使用self来调用当前对象的其他对象方法
    NSLog(@"self = %p", self);
    NSLog(@"_name = %s", self->_name);
    [self hehe];
    d. 必须使用self场景
    a). 如果在方法当中存在和属性同名的局部变量,如果想要访问同名的局部变量,直接写就可以了,如果想要访问当前对象的同名属性,必须使用self
    b). 在对象方法中,如果要调用当前对象的对象方法必须使用self
    e. 选用self场景
    如果这个时候想要访问对象的属性, 可以选择性使用.
    f. 属性要求以下划线开头, 局部变量不要求以下划线开头.
    4). 把self用在类方法中
    a. 类加载:当类第1次被访问的时候,会将类的代码存储在代码区
    b. 在类方法中, self也是一个指针,指向当前类
    c. 获取类在代码段中的地址
    a). 调试, 获取isa指针
    b). 在类方法中查看self值
    c). 调用对象的对象方法class
    d). 调用类的类方法class
    d. 可以用self调用本类中的其他类方法

    5). 对象方法可以声明多次,但只能实现一次.
    对象方法和类方法可以重名.

    6). 注意
    a. 在对象方法中可以通过self访问当前对象成员, 不能使用self调用本类中的类方法
    b. 在类方法中, 可以使用self调用当前类中的其他类方法.不能使用self访问对象成员.

  4. 继承
    1). 继承的目的: 子类想拥有父类中的所有成员

    2). 语法

     ```
         @interface 类名 : 父类
    
         @end
     ```
    

    3). 效果: 子类拥有了父类的所有的成员
    4). 术语

        @interface Student : Person{
         }
    

    Student类从Person类继承,Student类是Person类的子类, Person类是Student类的父类.
    5). 在新创建类模块的时候指定父类, Xcode自动完成
    6). 继承是类在继承,而不是对象在继承.
    创建的对象与对象之间没有任何关系.
    7). 继承的时候不要乱继承.
    凡是满足is a关系的类,就可以拥有继承的关系.
    8). 如果有1个成员不是所有子类都拥有,那么这个成员就不应该定义在父类之中

二、

  1. 继承的特性
    1). 单根性: 一个类只能有两个父类
    2). 传递性: A类从B类继承,B类从C类集成

  2. NSObject类
    是Foundation框架中的类.在这个类中有1个类方法new,这个方法是用来创建对象的,方法的返回值是创建这个对象的指针.
    如果我们想要让类具备创建对象的能力,就必须直接或者间接的要从NSObject类继承.

    在NSObject类中,有一个属性叫isa指针.
    NSObject类是OC中所有类的祖宗类.

  3. 子类不能存在和父类同名的属性.

  4. super关键字
    1). 可以用在类方法和对象方法中
    2). 在对象方法中可以使用super关键字调用从父类继承过来的方法
    3). 在类方法中 super关键字可以调用从父类继承过来的类方法
    a. 类方法也能被子类继承, 可以使用子类调用也可以使用父类调用
    b. 在子类的类方法中,可以使用super关键字调用父类的类方法
    4). super不能访问属性,只能调用父类的对象方法或者类方法

  5. 访问修饰符
    1). 用来修饰属性,可以限定对象可以在哪一段访问
    2). 修饰符
    @private: 私有,仅允许本类访问
    @protected: 受保护的,允许本类及子类访问
    @package: 被@package修饰的属性可以在当前框架中访问
    @public: 公共的,可以在任意地方访问
    3). 默认属性为@protected
    4). 子类可以继承子类的私有属性,只是无法访问
    5). 如果父类有一个方法为属性赋值或者取值,子类可以间接的访问这个属性
    6). 使用建议
    a. @public 无论什么情况下都不要使用,属性不要直接暴露给外界
    b. @private 如果属性只想在本类中使用不想在子类中使用,就使用她
    c. @protected 本类及子类使用
    d. 推荐使用默认的@protected
    7). 访问修饰符只能用来修饰属性, 不能用来修饰方法

  6. 私有属性和方法
    1). @private修饰的属性叫做私有属性,只能在类的内部访问,但是在外界的时候Xcode仍然会提示这个属性,只不过没有权限访问.
    2). 在@implementation中写一个大括弧,把属性定义在@implementation中做到真私有,外界无法看到。访问修饰符无效.
    将属性定义在@implementation之中和将属性定义在@interface中并标记为@private的区别是提示与不提示,都不能在外界访问.
    示例:

        //实现
        @implementation Person{
            int num;// 真私有
        }
        @end
    

    3). 私有方法
    方法只写实现不写声明即可做到方法私有,只能在本类的其他方法中调用,不能在外界调用

  7. 1). 里氏替换原则(LSP):子类可以替换父类的位置,并且功能不受影响
    a. 父类指针迫切的需求1个父类对象,而我们给了1个对象完全没有问题,因为子类就是1个父类.
    b. 因为父类中拥有的成员子类都有,所以不会影响程序的功能
    2). 里氏替换原则的变现形式
    a. 当1个指针指向1个子类对象的时候
    3). 作用:
    a. 一个指针不仅可以存储本类对象的地址还可以存储子类对象的地址
    b. 如果1个指针的类型是NSObject类型的,那么这个指针可以存储任意的OC对象地址.
    c. 如果一个指针数组是NSObject类型的,那么它可以存任意指针.
    d. 如果一个方法的参数是一个对象,那么我们可以为这个参数传递本类对象或者子类对象
    4). 当一个父类指针指向指向一个子类对象的时候,通过父类指针只能调用这个子类对象当中的成员.
    5). 方法的重写
    a. 直接在子类的实现中将这个方法重新实现一遍
    b. 当父类指针指向1个子类对象的时候.通过父类指针调用的方法,如果子类重写了,那么调用的就是子类的方法.

  8. 多态
    指的是同一个行为,对于不同的事物具有完全不同的表现形式.

  9. description
    1). %p 打印的是指针变量的值
    %@ 打印的是指针指向的变量
    2). 使用%@打印1个对象
    输出的格式: <对象所属的类名: 对象的地址>
    3). 原理
    当使用%@打印1个对象的时候,NSLog的底层实现, 调用传入的对象的description方法, 拿到这个方法的返回值, 将这个字符串输出.
    4). description方法是定义在NSObject类之中的.
    实现: 返回的字符串格式@"<对象所属类名:对象的地址>"
    5). 重写description方法(类似于Java中的toString方法)

        - (NSString *)description{
            return [NSString stringWithFormat:@"姓名"];
        }
    

    6). 如果你希望%@打印一个对象的时候,对象的格式我们自己指定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值