关于iOS的一些面试题

(id)数据类型:1、对象不需要*号
2、可以发送任何存在的消息
3、不能用.属性
4、可以指向任何类的对象,而不关心其具体的类型

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

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

写一个单例

//单例
static User *user = nil;

@implementation User

+(id)defaultManager{
    @synchronized (self) {
        if (user == nil) {
            user = [[User alloc]init];
        }
    }
    return user;
}

+(instancetype)allocWithZone:(struct _NSZone *)zone{
    if (user == nil) {
        user = [[User alloc]init];
    }
    return user;
}
static HTTP_Manager_Delegate *manager=nil;

//在多线程中的一个只能有一次的标识符
static dispatch_once_t onceToken;

//多线程中 查看是否有一个带有onceToken标识的对象
dispatch_once(&onceToken, ^{
    //如果没有 创建
    manager = [[HTTP_Manager_Delegate alloc]init];
});
//如果有 就return
return manager;

@class
仅仅是声明一个类名,并不会包含类的完整声明
能解决循环包含的问题:当两个类文件有循环依赖关系 ( A 引用 B , B 引用 A ) 时,需要用 @class

import 和 #include

import 是 Objective-C 导入头文件的关键字,完整地包含某个文件的内容

会自动导入一次,不会重复导入;
不会引发交叉编译;

include

C/C++ 导入头文件的关键字,完整地包含某个文件的内容
会引发交叉编译, 因为在 Objective-C 中会存在C/C++和Objective-C 混编的问题,如果用 #include 引入头文件,会导致交叉编译

import<> 和 import""
<> : 引用系统文件,它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.

"": 用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查

网络请求:首先需要一个接口,还需要request(设置缓存方式,请求时间),需要连接服务器,请求数据,解析;

AFN
全称是AFNetworking,是对NSURLConnection的一层封装
它运行效率没有ASI高,但是使用比ASI简单
它 实现推送,要一个接口,封装参数(字典)、manager 设置请求格式 ,还可以post/get请求

get/post区别
get:url与参数封装到一起,有长度限制,安全系数低
post:url与参数分开,长度不受限,安全系数高

block作用:
1、保存代码。一段代码在合适的时间执行(请求成功时弹出一个提示框)。
2、block一般用来两个的类的数据逆传递(修改昵称的时候)
3、block也可以将一个操作当做参数来传递
做回调函数,可替代代理;
注:如果要在代码块里修改外部的局部变量的时候,要用__block或者__weak修饰,不然会崩溃。

循环引用:
strong weak

delegate 可以用assign、weak
用weak,避免野指针(一个对象释放了,但内存没有释放掉)

UITableView的重用机制?.

tableView 出现界面卡死,或者上下滑动出现卡顿现象的原因?
1、没有使用重用机制;
2、滑动cell时,有耗时操作,阻塞主线程(只能用来更新UI)

多线程:用来处理耗时操作,增加用户体验
多线程包括?
NSThread:开辟线程,需要手动管理
NSOperation:需要有线程队列,可以添加依赖关系,(如果不放在线程中,它不一定在子线程中)
GCD:NSOperation是基于GCD的封装
1》为多核的并行运算提出了解决方案
2》GCD会利用更多的CPU内核,比如双核,四核
3》GCD自动管理线程的生命周期(创建线程,调度任务,销毁线程)
4》程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码

  • 1、创建视图
  • 2、创建一个串行队列
  • 3、用异步方式执行串行队列中的任务
  • 4、加载网络资源
  • 5、回到主线程
  • 6、更新UI
    执行队列的四种方式:
    串行同步
    串行异步
    并行同步
    并行异步

数据持久化

常用的数据持久化方式有: 属性列表(plist文件)、归档(存储自定义的类的对象时;存储用户的数据(昵称,uid))、偏好设置(NSUserDefault(存储一些简单的数据(用户的设置)))、sqlite3、core data、FMDB(大量数据的时候) create table student IF NOT EXISTS (id
integer, name text, age text)

当有少量基础数据类型的数据和NSArray、NSDictionary需要储存并且无需加密时,就以使用plist文件

储存少量的数据,而且需要加密,比如登陆密码、获取的accessToken时,或者需要储存对象,比如做收藏夹、最近访问,都可以使用键值归档

偏好设置的话就是储存一些用户设置信息,比如程序中设置当中的一些开关的Bool值等

当需要储存大量的数据时,比如需要离线缓存一些数据,就需要使用数据库了,sqlit3是c语言的东西,使用起来不是特别方便,而FMDB是oc对其的封装使用起来比较方便,所以一般开发当中都是使用FMDB

VFL(可视化格式语言)有几个标示符?

VFL:Visual Format Language 可视化格式语言
H:水平方向
V: 垂直方向
| 表示父视图
-  本身表示一段距离
-距离- 就表示指定距离
视图本身的宽度
[字符串表示的视图] 表示自动布局当前视图 参照视图
[字符串表示的视图(视图的宽高 或者 最小最大的宽高或者相对宽高)]; 注意:()不要丢掉
H:|-50-[view1(>=100)]-50-|
V:|-100-[view1(30)]
使用自动布局的步骤:
1.使用自动布局 autulayout    frame 就会失效 ——>不需要再去设置视图的frame
   使用代码自动布局的时候 需要禁用   translatesAutoresizingMaskIntoConstraints   =NO
2.绑定视图与字符串
3.添加约束

中国语言
横向:距离父视图左侧100 视图本身的宽度最小是100 距离父视图右侧是100
竖向:距离父视图顶部150 视图本身的高度是40

可视化语言
H:|-100-[view(>=100)]-100-|
V:|-150-[view(40)]

推送流程:

1、首先要有APPID;
2、根据 APP ID 创建推送证书(根据需要创建不同环境下的推送证书)
3、再向推送平台提供推送证书
4、向苹果服务器发送设备信息 接收苹果服务器发送回来的deviceToken
5、向推送服务器发送deviceToken
6、再推送服务器设置接收推送的用户 以及推送的消息内容 并发给苹果服务器
7、苹果服务器根据 deviceToken 向用户发送设置好的推送消息
8、手机端接收到推送消息 在自己的应用中显示

NSArray 和 NSSet的区别?

NSSet :
1、无序的、不重复的;存放到NSSet中的内容并不会排序与添加顺序也没有关系
2、通过anyObject来访问单个元素
3、遍历NSSet中的每个元素。通过forin循环来遍历
4、好处:效率高。
5、应用场景:

比如重用Cell的时候,从缓存池中随便获取一个就可以了,无需按照指定顺序来获取
当需要把数据存放到一个集合中,然后判断集合中是否有某个对象的时候

*NSArray
1、有序的、可以有重复对象。对象的顺序是按照添加的顺序来保存的
2、好处:有序访问
3、应用场景:在绝大多数需要依赖顺序的情况下(比如tableView的数据源集合,在实际操作中要根据下标来获取对象)
4、通过下标来访问

收藏、最近

收藏和最近主要就是使用工具类对数据进行增加和删除,保存数据时要重写数据的equalto方法(因为计算机是根据内存地址比较的,而有时候内存地址虽然不同,但是储存的数据确实一样的,所以一般根据数据的位置标识(例如id值)比较)

如果是做最近,就需要将上一次的数据删除,添加新的数据进来,如果在搜藏是需要记录控件的编辑和选中状态,就需要在数据模型中添加相应的属性,利用数据来控制控件的状态

常出现的问题就是使用tableview时会出现循环利用的问题,这个问题就可以使用数据的值来避免,每次加载cell时,他的状态是受数据控制的,数据不会发生循环利用的问题,这个问题也就不会出现了

加载本地图片有哪些方法?

1、imageNamed
2、dataWithContentsOfFile
3、使用[UIImage imageWithContentOfFile:] 或者[image initWithContentOfFile:]

这些知识我整理的一小部分,如果有什么错误,希望指出,我们共同进步。

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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,036评论 29 470
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 1,876评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 1,982评论 0 12
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,318评论 0 35
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,696评论 2 37