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的封装。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,390评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,826评论 0 9
  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 6,936评论 2 26
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,930评论 18 399
  • 重置远程仓库的地址 在项目的根目录下执行下面的命令:
    JohnShen阅读 2,299评论 0 0