Objective-C 学习第四天

简介: 一、Xcode文档的安装1). Xcode文档提供了很多框架, 框架当中有很多类和函数, 提供的一些数据类型.2). Xcode文档需要单独安装.

一、

  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). 如果你希望%@打印一个对象的时候,对象的格式我们自己指定

目录
相关文章
|
存储 Java 程序员
C++ 开发者快速学习 Objective-C 语言核心语法
本文将讨论 Objective-C 语言的核心语法。这部分开始详述一些具体的语法。正如你期待的一样,涉及到了定义和类。
257 0
|
存储 C语言 iOS开发
Objective-C 学习第一天
一、基础语法 OC相对于C a. 在C的基础上新增了面向对象的语言 b. 将C的复杂、繁琐的语法封装的更为简单 c. OC完全兼容C语言 OC程序的源文件后缀名是.m m代表message 代表OC当中最重要的一个机制 消息机制 C程序的源文件的后缀名.c main函数仍然是OC程序的入口和出口 int类型的返回值代表程序的结束状态 main函数的参数: 仍然可以接收用户在运行程序的时候传递数据给程序, 参数也可以不要 #import指令 1). 以#号开头,是1个预处理指令 2). 作用: 是#include指令的增强版。
844 0
|
存储 iOS开发 C语言
Objective-C 学习第二天
一、 对象在内存中的存储 内存中的五大区域 栈 存储局部变量 堆 程度员手动申请的字节看空间 malloc calloc realloc函数 BSS段 存储未被初始化的全局变量, 静态变量 数据段(常量区) 存储已被初始化的全局、静态变量、常量数据 代码段 存储代码 存储代码程序 类加载 a.
753 0
|
存储 iOS开发
Objective-C 学习第三天
封装 一、 什么是错误 一般情况下,错误是指源代码不符合语法规范,然后编译报错 后果: 程序无法编译 什么是Bug? 程序可以编译、链接、执行,但是程序执行的结果不是我们预想的。
923 0
|
存储 iOS开发 编译器
Objective-C 学习第五天
一、 创建一个对象,内存是如何分配 1). 子类对象中有自己的属性和所有父类的属性 2). 代码段中每一个类都有一个isa指针,这个指针指向它的父类. 结构体与类 相同点: 都可以将多个数据封装为1个整体 struct Data{ ...
678 0
|
存储 安全 iOS开发
Objective-C 学习第六天
一、 内存管理 内存的作用: 存储数据. 1). 如何将数据存储到内存之中 声明1个变量,将这个数据存储进去 2). 当数据不再被使用的时候,占用的内存空间如何被释放 内存中的五大区域 栈:局部变量,当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收.
991 0
|
存储 对象存储 iOS开发
Objective-C 学习第七天
一、 自动释放池的原理 存入到自动释放池中的对象,在自动释放池销毁的时候,会自动调用储存在该自动释放池中的所有对象的release方法. 可以解决的问题: 将创建的对象,存入到自动释放池之中,就不再需要手动的release这个对象了,因为池子销毁的时候,就会自动的调用池中所有的对象release.
862 0
|
存储 iOS开发
Objective-C 学习第八天
一、延展 延展: Extension 1). 是一个特殊的分类,所以延展也是类的一部分 2). 特殊之处: a. 延展这个特殊的分类没有名字 b. 只有声明没有实现,和本类共享一个实现 延展的语法 语法: @interface 本类名 () @end 没有实现,和本类共享一个实现.
857 0
|
存储 iOS开发 对象存储
Objective-C 学习第九天
一、 框架: 系统或者第三方事先写好的写很牛X功能的类,把这些类交给我们使用,这些类的集合就叫框架. Foundation框架: 是一个包,有很多类和函数,定义了一些数据类型.
953 0
|
存储 对象存储 iOS开发
Objective-C 学习第十天
一、NSDictionary NSArray和NSMutableArray数组 存储数据特点:每个元素紧密相连,并且每个元素中都是直接存储的值. 缺点:数组元素下标不固定,都有可能发生变化,无法通过下标来唯一确定数组中的元素.
812 0