OC特有的语法问题总结

分类(类别、类目)
  • 作用
    • 在不修改原来类的基础上,扩充一些方法
    • 一个庞大的类可以分模块开发
    • 一个庞大的类可以由多人编写,利于团队合作
  • 格式
    • .h文件中声明
         @interface ClassName(CategoryName)
               NewMethod;
         @end
         1.ClassName : 原类名(要为哪个类扩展方法)
         2.CategoryName :需要添加的类名
         3.NewMethod : 需要添加的方法
         4.不能定义变量
      
  • 注意事项:
    • 只能增加方法,不能增加成员变量
    • @property只会生成getter和setter方法,不会生成实现私有成员变量
    • 分类可以访问原来类中的成员变量
    • 如果出现分类和原类出现方法同名的情况,优先调用分类中的方法,原类中的方法会被忽略掉
  • 分类的编译顺序:
    • 多个分类中有同名方法,则执行最后编译的方法
    • 方法调用的优先级:
      • 分类(最后编译的的方法优先)
      • 原类
      • 父类
  • 类扩展:
    • 没有分类名称的分类,可以被认为是匿名的分类。可以声明私有的方法和属性

Block:

  • Block简介:

  • Block是一种特殊的数据类型,在动画、多线程、网络请求回调中有着广泛的应用。可以保存一段代码,在合适的时候取出来,功能类似于函数和方法

  • Block格式:

    • 大体格式:
       返回值类型 (^block变量名)(形参列表) = ^(形参列表){};
    
    • block最简单形式
    void (^block名)() = ^{代码块;}
    
     例如:
     void (^myBlock)() = ^{ NSLog(@"李南江"); };
    
 - block带有参数的block的定义和使用

```objc
  void (^block名称)(参数列表)
  = ^ (参数列表) { // 代码实现; }

   例如:
   void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
  • 带有参数和返回值的block
   返回类型 (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }

    例如:
int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
  • 调用Block保存的代码
    block变量名(实参);
   ```  
####  运行时:
-  运行时简介:
  -  runtime即运行时,oc就是这种运行时机制,其中最主要的就是消息机制
  -  oc是一门动态编译语言,他在编译的时候并不能决定调用哪个函数,即使这个函数只有声明而没有实现也不会报错。而如果调用了没有实现的方法,c语言是会报错的。
- 主要的使用场景:
  -  发送消息
      -   方法调用的本质:让对象发送消息(只有对象才能发送消息)
  -  交换方法(系统自带的方法功能不够,需要扩充方法,保持原有功能)
      -  方法一:集成系统的类,重写方法
      -  方法二:使用runtime,交换方法
  -  动态添加方法
      -  使用场景: 一个类的方法非常多,加载类到内存的时候需要给每个方法生成映射表,十分耗费资源,这时候可以采用动态的给每个类来添加方法
  -   给分类添加属性
     - 给一个类添加属性,本质是给这个类添加关联,公布时把这个值得内存空间添加到类的内存空间
  -  字典转模型

-  简述app的完整启动过程
 (有storyboard)
  -  执行main函数
  -  执行UIApplicationMain函数
  -  创建UIAppliction对象,并设置UIApplication的代理
  -  开启一个主运行循环,保证应用程序不退出
  -  加载info.plist配置文件,判断info.plist文件当中有没有Main storyboard file base name,如果有就去加载info.plist中指定的文件,如果没有,则加载完毕

    (没有storyboard)
-  HTTP和TCP协议的区别:
  -  HTTP协议是构建在TCP协议基础之上的,运行在应用层,而TCP运行在传输层
 -  HTTP是无状态的短连接,规定了如何进行缓存以及请求的格式,而TCP是有状态的长连接,因此传递数据是安全的。
 -  HTTP可以处理从哪儿请求,如何请求;而TCP负责保证数据传输的安全性。
-  写一个标准的宏MIN,返回最小的数:
  -  \#define MIN(A,B) ((A) <= (B)? (A) : (B))
-  多线程的底层实现:
  - 什么是多线程:在多线程开发中,一个程序对应一个进程,而一个进程至少对应一个线程,其中每个线程都可以执行不同的任务(UI刷新、触摸点击事件)也就是说线程是执行进程的最基本的单元。整个多线程基于mach来实现
  -  应用的开发场景有c对应的pthread、oc对应的NSThread以及GCD和NSOpreation,最常见得是GCD和NSOpreation,其中NSOpreation和NSOpreationQueue又是GCD的封装。

你可能感兴趣的:(OC特有的语法问题总结)