面试题回顾

回顾:
C
C语言的基础语法
数组
函数
OC

XCODE版本(7.3) 电脑系统版本(MAC OS X EI Capitan)
移动设备版本(iOS9.1)

面向对象oop(OC) 面向过程(C)
面向过程 是流程化 每一步 都会影响到下一步的执行 甚至到程序是否成功执行完毕
面向对象 不受步骤的约束 在操作的时候 如果没有这个对象 也不会受到严重影响

import、#include和@class有什么区别

@class一般用于头文件中需要声明该类的某个实例变量的时候用到,它只是声明了一个类名,关于这个类的内部实现都没 有告诉编译器,在m文件中还是需要使用#import。
而#import比起#include的好处就是不会引起交叉编译。

面向对象的三大特征
封装
继承
多态

内存管理

内存管理的原则
只要有alloc retain copy (retainCount +1)就要有对应的release(retainCount -1)
谁分配 谁释放
retain 表示持有(保留)特性 引用计数加1
copy 拷贝一份赋值 会生成一个不受上一个对象影响的对象9
alloc 这个函数 相对对的函数
delloc 销毁对象的时候调用
alloc 给对象分配内存的时候调用

autorelease 与release 的区别
release autorelease 都可以是对象的引用计数-1
release立即释放
autorelease 延迟释放

自动释放池NSAutoreleasePool
@autoreleasepool{

}
不用去关注 对象的释放时间
当出池的时候 自动释放(调用 autorelease)
自动释放池 也是一个对象 如果用 alloc init 初始化 也需要 释放自动释放池的对象

自动释放池的使用
for (int i=0; i<10; i++) {
@autoreleasepool {
NSObject *obj = [[[NSObject alloc] init]autorelease];
}
}

setter getter 的内存管理

  • (void)setUser:(NSObject *)user{
    if (_user!=user) {
    [_user release];
    _user = [user retain];
    }
    }

  • (NSObject *)user{
    return _user;
    }

  • (void)dealloc{
    [super dealloc];
    [_user release],_user = nil;
    }

继承 category的区别
继承 可以添加 变量
调用的时候 可以使用 子类的对象去调用 子类拥有父类的所有属性 方法 包括category 协议。。。
category 只能添加 方法
调用的时候 使用原有类的对象去调用

OC里面有多继承么?怎么实现多继承呢
没有多继承 可以多级 继承
可以使用代理来实现

category estensiton 区别
category 类目 在不改变原有类的情况下 给他扩充方法
estensiton 延展 添加 不公开的 变量 属性 方法

什么是protocol
是协议 是一个 统一的对外接口 可以通过他来实现 查找多个类的方法

什么是代理 写个完整的代理
代理 又叫委托 自己不能完成的 委托给别人完成
可用于回调

代理 通知的区别
代理 是一对一的
通知 是一对多的

通知 KVO 的区别
KVO 是键值观察者 通过观察的属性值 发生改变 去调用 观察的方法
通知 通过通知名字 来发送 接收通知

KVO KVC的区别
KVC 键值编码 通过把属性名 当成key 来改变属性的值
KVO 键值观察者 通过KVC的方式 把属性当做key 来观察属性值的变化 做出响应

在实际工作中 在哪用到了 KVC KVO
数据转模型 用到了KVC
封装下拉改变导航栏透明度的时候 使用的是KVO

声明是单例 singleton
通过方法 让对象只创建一次
可以避免重复创建 节省内存开支
使用环境:
不需要重复创建的操作类中 封装数据库 网络请求
某个固定的对象 不希望在使用的时候 被创建成其他的对象(当前用户)

写一个单例

  • (id)defaultManager{
    static ClassName *name = nil;
    if (!name) {
    name = [[ClassName alloc] init];
    }
    return name;
    }

  • (id)defaultManager{
    static ClassName *name = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    name = [[ClassName alloc] init];
    });
    return name;
    }

在实际开发的时候 使用通知 KVO 会出现 崩溃现象 你是怎么解决的?
通知 KVO 的时候 需要移除 观察者

block 在实际项目中的使用
block 做回调函数 可替代代理
写一个代理 用block来替代(上机)

什么是懒加载
在使用的时候 才去创建
写一个懒加载

readwrite,readonly,assign,retain,copy,nonatomic 、strong、weak属性的作用?并区别
strong(强引用)、 weak(弱引用)?什么情况使用copy,assign,和retain?
readwrite 是可读可写特性;需要生成getter方法和setter方法时
readonly 是只读特性 只会生成getter方法
不希望属性在类外改变
assign 直接赋值 基本数据类型
retain 表示持有(保留)特性 引用计数加1
copy 拷贝一份赋值 会生成一个不受上一个对象影响的对象
nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic 原子操作表示多线程安全,UI(主)线程使用 nonatomic
strong强引用->属性所属的对象被释放的时候 这个属性 才会被释放 weak弱引用->不稳定的 可能会被释放掉

-面试题

Objective-C有私有方法么?私有变量呢?如多没有的话,有没有什么代替的方法?
objective-c类里面的方法只有两种, 静态方法和实例方法.但是可以通过把方法的声明和定义都放在.m文件中来实现一个表 面上的私有方法。有私有变量,可以通过@private来修饰,或者把声明放到.m文件中。在Objective‐C中,所有实例变 量默认都是私有的,所有实例方法默认都是公有的

c c++ 和obj-c如何混用?
1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只
能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp。
2) 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是问题
3)在cpp中混用obj- c其实就是使用obj-c编写的模块是我们想要的。如果模块以类实现,那么要按照cpp class的标准写类的定 义,头文件中不能出现obj-c的东西,包括#import cocoa的。 实现文件中,即类的实现代码中可以使用obj-c的东西,可以import,只是后缀是mm。如果模块以函数实现,那么头文件要按 c的格 式声明函数,实现文件中,c++函数内部可以用obj-c,但后缀还是mm或m。总结:只要cpp文件和cpp include的文件中不包含 obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的是obj-c编译后的o文 件,这个东西其实是无差别的,所以可以用。obj-c的编译器支持cpp。

objc优缺点----OC的特点:id类型,动态
objc优点:
1)Cateogies 2)Posing 3)动态识别 4)指标计算 5)弹性讯息传递
6)不是一个过度复杂的C衍生语言 7)Objective-C与C++可混合编程
缺点:
1)不支援命名空間 2)不支持运算符重载 3)不支持多重继承 4)使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化 方法都用不到。(如内联函数等),性能低劣。

什么是Archiver 序列化 归档 coding :NSKeyedArchiver NSKeyedUnarchiver
可以做什么?
做缓存 保存数据
如果对象不支持归档 怎么让他支持归档
自定义归档 重写 - (void)encodeWithCoder:(NSCoder *)aCoder;

  • (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;

浅复制和深复制的区别?
浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身。//通过对象的指针来访问这个对象----只赋值地址 深层复制(mutableCopy):复制引用对象本身---再创建一个对象 意思就是有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的 只不过是是一个指针,对象本身资源 还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一 个思想。深复制就好理解了,内存中存在了两份独立对象本身。//当修改A时,A copy不变。

便利构造器
+(id)Person{
Person *person=[Person alloc]init];
return person;
}
自定义构造方法
怎样拷贝 不支持拷贝的对象
给这个类 添加 拷贝协议(NSCoping NSMutableCoping) 并实现 拷贝协议- (id)copyWithZone:(nullable NSZone *)zone

  • (id)mutableCopyWithZone:(nullable NSZone *)zone

怎样通过KVC 访问某个类中 对象中的 对象的属性值
通过键路径的方式 setVaule forKeyPath:
键路径是通过.是区分key的层次 类似表示路径的/

数据持久化存储方式有哪些?以及特点
1.plist 属性列表 最外层只能存储数组字典 里面只能存储 bool NSNumber String Data Date
2.NSUserDefault 最终也是保存成plist 系统封装了保存的路径 保存的方法
3.归档 可以对保存数据的文件 进行加密
4.sqlite 关系型数据库 以表的形式存储 FMDB是对 OC中 sqlite操作封装 的第三方库
5.coreData 是苹果封装的 对文件操作的框架 可以 以对象的形式存储 底层数据文件可以是sqlite类型 也可以是XML JSON …

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,118评论 29 470
  • 1、Objective-C的类可以多重继承么?可以采用多个协议么?答:不可以多重继承,可以采用多个协议。2、#im...
    亦晴工作室阅读 618评论 0 3
  • 1、Objective-C的类可以多重继承么?可以采用多个协议么?答:不可以多重继承,可以采用多个协议。2、#im...
    亦晴工作室阅读 641评论 0 0
  • 自打公众号开通了“原创”,“赞赏”功能也随即得到了开通。 开通之后,没有对“赞赏”抱有太多幻想,心想,随喜就好,有...
    今小汐阅读 3,319评论 2 4
  • 1、退出Xcode2、重启电脑3、删除DerivedData下的文件 (该文件夹下是Xcode的项目运行缓存文件,...
    杰铭的博客阅读 2,871评论 0 2