面试题之 OC

  1. OC语言的特性?

①OC 语言是 C 语言的一个超集,在 C 的基础上添加了面向对象的特性;

②OC 语言与 Java 语言相同都单继承;

③OC 不支持命名空间,取而代之的是在类名之前添加前缀,以此来区分;

④OC 是动态运行时语言;

  1. OC 语言的优缺点?

优点:类目、动态识别、支持 C 语言、OC 与 C++可以混编

缺点:不支持命名空间、不支持运算符重载、不支持多重继承

  1. 什么是命名空间?

实际上就是一个有程序员设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域。把一些全局实体分别放在各个命名空间中,从而与其他全局实体分割开来;

  1. 命名空间的作用?

建立一些相互分隔的作用域,解决名字冲突

  1. 什么运算符重载?

对已有的运算符重新进行定义,赋予其另一种功能,以适应不通过的数据类型

  1. OC 语言可以多继承吗?如果没有如何实现?

OC没有多重继承,多继承在这里是用protocol委托代理来实现的。

  1. OC中有私有方法和私有变量吗?

原因

跟 oc 是一门动态性比较强的语言有关

方法一般来说声明在.m 文件中的方法是不可被外界访问:

可以通过objc_msgSendperformSelector: withObject:访问

变量

Teacher *teacher = [[Teacher alloc] init];

Ivar nameIvar = class_getInstanceVariable([teacher class], "name");

NSString *name = object_getIvar(teacher, nameIvar);

NSLog(@"son name: %@", name);
  1. OC 语言的动态性体现在哪些方面?

动态类型:即运行时再决定对象和数据的类型,简单来说就是id类型。事实上,由于静态类型的固定性和可预知性,从而使用的更加广泛。静态类型是强类型,而动态类型属于弱类型,运行时决定接受者。

动态绑定:基于动态类型,实例所属类确定后,将某些属性和相应的方法绑定到实例上。

动态加载:根据需求加载所需要的资源,最基本就是不同机型的适配,例如,在Retina设备上加载@2x的图片,而在老一些的普通苹果设备上加载原图,让程序在运行时添加代码模块以及其他资源,用户可根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件,可执行代码可以含有和程序运行时整合的新类。

  1. 什么是封装、继承、多态?

继承:子类继承父类,获取了父类的属性和方法,子类可以对父类的功能进行扩展,添加属性和方法;有利于代码的复用;

多态:多态一般都是结合继承来说,其本质是子类通过覆盖或重载父类的方式,来使得同一类对象同一方法的调用产生不同的结果;

封装: 将一些相关的函数和对象放在一起,对外提供相关函数,不暴露具体的执行细节;

  1. OC与C语言如何混用?OC与C++如何混用?

实现文件的扩展名.m改成.mm即可

  1. OC中协议和java中的接口区别?

协议定义的方法,可以设置可选实现和必须实现。

接口则是必须全部实现。

  1. iOS 与 H5 交互的方式有哪些?

利用WKWebView进行交互(系统API)

利用UIWebView进行交互(系统API)

苹果的javascriptcore.framework框架;

跨平台cordova框架;

OC第三方WebViewJavascriptBridge

  1. #include 与 #import的区别?

#include和#import 效果相同,只是后者不会引起交叉编译,确保头文件只会被导入一次

  1. #import 与 @class 的区别?

#import会包含这个类的所有信息,包括实例变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。使用#import编译效率高,防止相互包含的编译错误。

  1. #import"" 与#import <>

1.使用""引入的是本地工程的文件,而使用<>引入的是系统库的文件。

2.""会先查找用户目录下文件是否存在,如果不存在,会继续查找库目录而<>只会查找库目录

3.cocoaPods引入的库最好使用<>,因为使用cocoaPos导入的库,也算是系统引用库的一种

  1. 一个NSObject对象占用多少内存?

系统分配了16个字节给NSObject对象(通过malloc_size函数获得)

但NSObject对象内部只使用了8个字节的空间(64bit环境下,可以通过class_getInstanceSize函数获得)

  1. 对象的isa指针指向哪里?

instance对象的isa指向class 对象

class对象的isa指向meta-class对象

meta-class对象的isa指向基类的meta-class对象

  1. OC的类信息存放在哪里?

instance对象:存放成员变量的具体值

class对象:存放对象方法、属性、成员变量、协议信息

meta-class对象:存放类方法

你可能感兴趣的:(面试题之 OC)