issue 23 :iOS 系统架构

发表于 2018-09-09   |   分类于 Objectiv-C 课程

笔记部分

  1. iOS 可以分为 核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch layer)。

    1. Core OS是位于iOS系统架构最下面的一层是核心操作系统层,它包括内存管理、文件系统、电源管理以及一些其他的操作系统任务。它可以直接和硬件设备进行交互。作为app开发者不需要与这一层打交道。
    2. Core Services是核心服务层,可以通过它来访问iOS的一些服务。
    3. Media是媒体层,通过它我们可以在应用程序中使用各种媒体文件,进行音频与视频的录制,图形的绘制,以及制作基础的动画效果。
    4. Cocoa Touch是可触摸层,这一层为我们的应用程序开发提供了各种有用的框架,并且大部分与用户界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作。
  2. iOS 生命周期:在 main.m 中指明,进入到 AppDelagate 文件。图片描述
  3. application didFinishLaunchingWithOptions:当应用程序启动时执行,应用程序启动入口,只在应用程序启动时执行一次。若用户直接启动,lauchOptions内无数据,若通过其他方式启动应用,lauchOptions包含对应方式的内容。
  4. applicationWillResignActive:在应用程序将要由活动状态切换到非活动状态时候,要执行的委托调用,如 按下 home 按钮,返回主屏幕,或全屏之间切换应用程序等。
  5. applicationDidEnterBackground:在应用程序已进入后台程序时,要执行的委托调用。
  6. applicationWillEnterForeground:在应用程序将要进入前台时(被激活),要执行的委托调用,刚好与applicationWillResignActive 方法相对应。
  7. applicationDidBecomeActive:在应用程序已被激活后,要执行的委托调用,刚好与applicationDidEnterBackground 方法相对应。
  8. applicationWillTerminate:在应用程序要完全推出的时候,要执行的委托调用,这个需要要设置UIApplicationExitsOnSuspend的键值。
  9. 调用顺序

    1. 初次启动:iOS_didFinishLaunchingWithOptions—>iOS_didFinishLaunchingWithOptions
    2. 按下home键:iOS_applicationWillResignActive—>iOS_applicationDidEnterBackground
    3. 点击程序图标进入:iOS_applicationWillEnterForeground—>iOS_applicationDidBecomeActive

思考

  1. 生命周期的理解有利于进行应用的开发。默认只用第一个,后续可能随着应用的复杂,会用更多。

源文件

  • UI基础控件(2018-07-27).key

issue 22 :OC 基础 - 类之间的通信

发表于 2018-09-09   |   分类于 Objectiv-C 课程

笔记部分

  1. delegate:如果A和B有相互的关联,就用delegate ,代理是一对多
  2. notification:采用单例的设计模式,如果没关系就用通知.,通知是多对多,而且发送的只管发送,接收的只管接收.当需要跨越多个控制器进行传值的时候,notification是一个最方便的选择.,使用完毕需要及时注销
  3. block:block跟delegate使用场合类似,使用起来更简单一些.,但block使用都是在一对一
  4. 在开发项目中,有很多时候我们需要一个全局的对象,而且要保证全局有且仅有一份即可。单例在这个时候就是最佳的选择,但是需要注意的是:在多线程的环境下也需要做好线程保护。

思考

  1. 代理模式是一种设计模式
  2. 通知模式也是一种设计模式

作业

定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值。(Objective-C)

  1. 使用NSLog输出学生对象时,输出信息格式为:My Name Is XXX  Age Is XXX Score Is XXX
  2. 对5个学生对象按照成绩—》年龄—》姓名优先级排序(成绩相同按照年龄排序,成绩年龄相同按照姓名排序(5个学生的属性值自己随便设定,姓名不考虑中文,按26个大小字母排序))

issue 21 :内存管理

发表于 2018-09-09   |   分类于 Objectiv-C 课程

笔记部分

  1. 当APP所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。
  2. 管理范围:任何继承了NSOject的对象,对其他基本数据类型(int、char、float、double、truct、enum等)无效
  3. Object-C内存管理方式有三种:手动引用计数(MRC,Manual Reference Count)、自动引用计数(ARC,Automatic Reference Count)、自动垃圾回收
  4. 每个OC对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有多少人正在使用这个OC对象
  5. 每个OC对象内部专门有4个字节的存储空间来存储引用计数器
  6. 引用计数器的操作

    1. 给对象发送一条retain消息,可以使引用计数器值+1(retain方法返回对象本身)
    2. 给对象发送一条release消息,可以使引用计数器值-1
    3. 可以给发送对象发送retainCount消息获得当前的引用计数器值

7.对象的销毁

    1. 当一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收
    2. 当一个对象被销毁时,系统会自动向对象发送一条dealloc消息
    3. 一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言
    4. 一旦重写了dealloc方法,就必须调用[super dealloc],并且放在最后面调用
    5. 不要直接调用dealloc方法
    6. 一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致程序崩溃
    7. 基本方法

      1. retain :计数器+1,会返回对象本身
      2. release :计数器-1,没有返回值
      3. retainCount :获取当前的计数器
      4. dealloc:当一个对象要被回收的时候,就会调用
    8. 基本概念

      1. 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用
      2. 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)
      3. 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错
    1. 浅拷贝和深拷贝
      1.浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间;当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。

      1. 深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
      2. copy 和 retain 的区别: copy 是创建一个新对象,retain 是创建一个指针,引用对象计数加一。 copy属性标识两个对象内容相同,新的对象 retain count 为1, 与旧有对象引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。
    2. Key Value Coding: 存取类属性, 通过字符串来访问对象属性。KVC
      10.Key Value Observer:通过KVC的方式修改被观察者的属性时,主动通知观察者kvo

    思考

    1. 当你需要保留时,使用基本类型数据。但是要注意内存泄漏

    参考链接

    源文件

    • Objective-C高级语法知识大纲(2018-07-25).key

    issue 20 : OC 基础 - 类

    发表于 2018-09-09   |   分类于 Objectiv-C 课程

    笔记

    1. 类是对某个对象的定义,是某种类型的对象变量和方法的原型。
    2. 类是从一些具有相同属性或功能的具体实例,抽象出共有的一些属性的,自定义抽象数据类型。
    3. 一个类有两个文件xxx.hxxx.m,.h 为定义文件,.m 为源码文件。
    4. 类有属性和行为,属性对应成员变量;行为对应成员方法
    5. 类抽象时,一般是名词
    6. 定义行为时的注意点:谁最清楚这个行为,那么该行为就属于谁
    7. 定义类时,需要用 @interface 开头,以 @end 结束,并在 class name 的位置写入类名称
    8. 类的首字母必须大写,类声明中属性必须写在 @interface 和 @end 之间
    9. 类的实现需要以 @implementation 开头,以 @end 结束
    10. 创建一个类时,需要给其发送一个消息:比如 [Student new] ,这样就创建了一个 Student 类。
    11. 通过类型指针保存对象位置。 Student *s = [Student new]
    12. 如果使用一个指针保存了某一个对象的地址,那么就称这个指针为某个类型的对象;
    13. @property 的内容暂时不关注,后续详细了解,参数主要是atomicnonatomicstrongweakassignretaincopy
    14. 对象方法前加-,类方法前加 + ;类方法类似 PHP 中的静态方法,对象方法和 PHP 中的 Public 方法一致。
    15. 对象方法和类方法的区别:方法区别

    思考

    1. 接口与实现分离的好处:如果我们操作接口(interface)而不是不具体的类型(class),那么当我们添加新的类型(class)进行程序扩展时,我们原有的代码(操作接口的代码)不需要进行修改。这样就使得程序易于扩展。出处
    2. 之前不熟悉 OC 的语法时,写起来很蛋疼,现在也就还好。

    有意思的内容

    1. 为什么 OC 源码文件的后缀是 .m

      1. message 的意思,来源:https://stackoverflow.com/a/652266/3977623
      2. 只是因为 .c 和 .o 已经被用了,来源来源:https://stackoverflow.com/a/652266/3977623
      3. methods 的意思,来源:https://stackoverflow.com/a/652306/3977623

    参考链接

    源文件

    • Objective-C高级语法知识大纲(2018-07-25).key

    issue 19:OC基础 - 语法和类型

    发表于 2018-09-09   |   分类于 Objectiv-C 课程

    笔记部分

    1. OC 是 macOS 、iOS 上主要的程序开发语言
    2. OC 继承了 C 的语法、基本类型,同时加入了定义类和方法的语法
    3. OC 是 C 语言的超集,提供了面向对象和动态运行时(多态)的功能
    4. 当进行动态类型识别和绑定的时候,Object-C还添加了对象结构管理和对象语法的语言层面的支持,将很多工作延迟到了运行时进行处理。
    5. 面向对象

      1. 注重业务功能的封装
      2. 以面向过程的思路去封装业务功能
      3. 将思维高度提升到管理者阶段
    6. OC 中其他常用类型

      1. NS integer:C语言中的int,在OC中同样支持,但是推荐 NSInteger
      2. BOOL:C++中的bool类型,为true和false,但是推荐 OC 中的 BOOL,为 YES 和 NO
      3. CGFloat:float 与 CGFloat,64位中 CGFloat 是 double 类型,32位中则是 float 类型
      4. NSString:不需要 alloc 和 init,Cocoa 框架高度优化了 NSString 类
      5. NSValue:NSValue 是个可以和各种基本数据类型互转的类。包括 CGPoint、CGRect、CGSize 等等
      6. NSNumber:NSNumber 继承自 NSValue,而 NSValue 继承自 NSObject 。NSNumber支持和基本数据类型的互转。
    7. 可变与不可变

      1. NSArray:一旦创建成功,内容不可改变;只能存放 OC 对象
      2. NSMutableArray可变对象数组:为数组分配内存空间;添加对象;向尾部添加数组对象;删除数组元素;替换某所引值对应的对象;数组迭代遍历
      3. NSDictionary 不可变字典:与数组不同, 字典靠key存取元素;key值不能重复; value必须是对象;键值对在字典中是无序存储的
      4. NSMutableDictionary 可变字典:与数组不同, 字典靠key存取元素;key值不能重复; value必须是对象;键值对在字典中是无序存储的

    思考

    1. OC 和 Swift 各有特色,如果是求职, OC 会好很多,因为求职你需要 Handle 别人的项目,老的项目一般都是 OC。
    2. OC 可以用之前 C 的语法,有 C 的基础会好很多。
    3. 可以去研究一下管理学,的确没有考虑过面向对象与管理学。

    参考链接

    源文件

    • Objective-C基础知识大纲(2018-07-23).key
    © 2019 Powered by Typecho & Theme 豫ICP备15027577号