Ios面试复习--碎片知识

2017-12-19  本文已影响0人  金克拉拉拉拉

1.@class

利用@class 可以简单的引用一个类

import “xxx” 是一个预编译指令,会将“ xxx ”的内容copy到import 所在的位置,并且import又一个特点,只有‘ xxx ’中的文件发生了变化,那么import 会重新copy一次

区别于import的是,@class  XXX 只是声明XXX是一个类,并不会copy该类的内容 

sososo 常见于在.h 中@class .m 中import

--1.可以提升编译效率

--2.解决循环依赖

2.MRC循环retain

MRC中引用计数为0时,释放该对象

循环retain 多见于两个对象互相引用对方,导致谁也不能被释放 既A retain B B retain A

解决循环引用的核心思路是减少一次引用 A retain B B assign A 或者交换

3.ARC中的循环retain

ARC中 不再有强指针指向该实例对象时,释放该对象

循环retain 多见于两个对象互相用强指针对方,导致谁也不能被释放 既A strong B B strong A

解决循环引用的核心思路是一方用弱指针指向对方即可A weak B B weak A 或者交换

注意,也可以使用assign ,但是不符合设计规范,assign 修饰符号,修饰非对象型变量

4.delegate 和 weak

修饰带有协议的指针 通常使用weak

修饰带有协议的指针

在遵循某协议时 时常会造成循环引用

控制器强引用tableview 而 tableview 的delegate 又被控制器遵循 易形成循环引用

将带有协议的指针 变成若引用既解决循环引用

5.ios 9 新特性 __kindof 

__kindof 表示约束为该类或者其子类

6.Port  小众线程间的通信方式

NSPort NSMassagePort NSMachPort

主线程 和 子线程 互相持有对方的Port 进而进行通信

7.不利用中间变量交换两个变量的值

交换变量

8.#import "" <> 的区别

#import"xxx" 表示从当前项目路径开始寻找文件,如果找不到,则到系统(项目)中配置的头文件路径去找;

#import<>表示直接到系统(项目)中配置的头文件路径去找。

9.#include< > 和 "" 的区别

#include< > 引用的是编译器的类库路径里面的头文件。

假如你编译器定义的自带头文件引用在 C:\Keil\c51\INC\ 下面,则 #include 引用的就是 C:\Keil\c51\INC\stdio.h 这个头文件,不管你的项目在什么目录里, C:\Keil\c51\INC\stdio.h 这个路径就定下来了,一般是引用自带的一些头文件,如: stdio.h、conio.h、string.h、stdlib.h 等等。

二、#include" "

#include" " 引用的是你程序目录的相对路径中的头文件。

10.#include 、 #import 、@Class 的区别

#import和#include的区别

--1.使用场合不同

#import是导入Objective-C头文件的关键词,#include是导入C/C++头文件的关键词

--2.重复引用

使用#include需要处理重复引用,#import能防止同一个文件被多次包含,则不需要处理重复引用

#import和@class的区别:

--1.包不包含

#import会包含这个类的所有信息(包括实体变量和方法),而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,你现在不需要关心

--2.用与不用

在头文件中,一般只需要知道被引用的类的名称就可以了,不需要关心类内部细节,所有用@class

在实现文件中,会用到被引用类的内部的实体变量和方法,所以用#import来包含被引用类的头文件

--3.编译效率

假如你有100个头文件都#import了同一个头文件A,或者这些文件存在依赖关系:A–>B, B–>C, C–>D...。当头文件A发生改变的时候,后面所有引用它的类都需要重新编译,这是非常耗性能的。而用@class则不会。

--4.是否会产生循环依赖

假如有循环依赖关系:A–>B,B–>A,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。

所以,一般来说,@class是放在interface中的,只是为了在interface中声明这个类。如果在@implementation中需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.

上一篇 下一篇

猜你喜欢

热点阅读