1.block底层原理
闭包(block),闭包就是能够读取其它函数内部变量的函数
Objective-C是对C语言的扩展,block的实现是基于指针和函数指针。
一个 block 实际是一个对象,它主要由一个 isa 和 一个 impl 和 一个 descriptor 组成。
2.百度地图基本API
import <BaiduMapAPI_Map/BMKMapView.h>// 地图视图
import <BaiduMapAPI_Location/BMKLocationService.h> //定位服务
import <BaiduMapAPI_Search/BMKPoiSearch.h>//Poi搜索附近
import <BaiduMapAPI_Map/BMKAnnotation.h>//标注点的protocol
import <BaiduMapAPI_Map/BMKPointAnnotation.h>//定位点的泡泡
import <BaiduMapAPI_Map/BMKPinAnnotationView.h>//提供类似大头针效果的annotation view
3.内存泄漏的情况下如何调试
1.打开XCode的选项:NSZombieEnabled 僵尸模式(打包时要取消)
2.用XCode的Analyze就能分析到哪里有内存泄露
3.使用Instruments的leaks工具分析使用中出现的内存泄漏
4.什么情况下会使用GCD
(GCD)是Apple开发的一个多核编程的解决方法,在多线程中使用比较多。在网络请求及复杂耗时操作时使用。
5.git和svn的区别
最核心的区别Git是分布式的,而Svn不是分布的。
Git把内容按元数据方式存储,而SVN是按文件。
Git没有一个全局版本号,而SVN有
Git的内容的完整性要优于SVN
Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以
SVN的特点是简单,只是需要一个放代码的地方时用是OK的。
Git的特点版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持
5.如何使用block代替target...action
创建分类UIButton+targetBlock 扩展action
6.iOS数据缓存
1.直接写文件方式
2.NSUserDefaults
3.归档操作
4.coreData
5.FMDB
7.谈谈你对响应者链的认识
在IOS中,有响应者链对事件进行响应,所有的响应类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会。
8.Runtime机制有没有深入了解过
runtime 是 OC底层的一套C语言的API(引入 或),编译器最终都会将OC代码转化为运行时代码,通过终端命令编译.m 文件:clang -rewrite-objc xxx.m可以看到编译后的xxx.cpp(C++文件)。
比如我们创建了一个对象 [[NSObject alloc]init],最终被转换为几万行代码,截取最关键的一句可以看到底层是通过runtime创建的对象
利用runtime 可以做一些OC不容易实现的功能
动态交换两个方法的实现(特别是交换系统自带的方法)
动态添加对象的成员变量和成员方法
获得某个类的所有成员方法、所有成员变量
9.怎么在手机主界面显示控制app里的音频,更改音量,上一曲下一曲
1.更改音量,有系统的API
2.上下曲的逻辑写在AudioController的音频播放控制单例里的,播放时传入的列表 并记录当前播放的index,上下曲目更换index并从播放数组取audio传入播放类进行播放。
10.使用xib或者stotyboard代码合并的时候遇到冲突是什么样的,怎么解决
http://blog.csdn.net/yuanyuan1314521/article/details/49836381
11.你是怎么使用FMDB的
FMDB是一种第三方的开源库,FMDB就是对SQLite的API进行了封装,加上了面向对象的思想
一 项目中添加libsqlite3库的依赖
导入FMDB源码:
下载FMDB的源代码,将代码文件拖入工程
#import导入FMDB的头文件"FMDatabase.h"
二、FMDB使用
使用FMDB前,需要先了解下3个主要类:
FMDatabase : 一个单一的SQLite数据库,用于执行SQL语句。
FMResultSet :执行查询一个FMDatabase结果集。
FMDatabaseQueue :在多个线程来执行查询和更新时会使用这个类。
一般的FMDB数据库操作有:
创建数据库
打开数据库、关闭数据库
执行更新的SQL语句
执行查询的SQL语句
12.GCD和NSOperation的关系,有什么区别
1.GCD的核心是C语言写的系统服务,执行和操作简单高效,因此NSOperation底层也通过GCD实现,换个说法就是NSOperation是对GCD更高层次的抽象,这是他们之间最本质的区别.因此如果希望自定义任务,建议使用NSOperation;
2.依赖关系,NSOperation可以设置两个NSOperation之间的依赖,第二个任务依赖于第一个任务完成执行,GCD无法设置依赖关系,不过可以通过dispatch_barrier_async来实现这种效果;
3.KVO(键值对观察),NSOperation和容易判断Operation当前的状态(是否执行,是否取消),对此GCD无法通过KVO进行判断;
4.优先级,NSOperation可以设置自身的优先级,但是优先级高的不一定先执行,GCD只能设置队列的优先级,无法在执行的block设置优先级;
5.继承,NSOperation是一个抽象类实际开发中常用的两个类是NSInvocationOperation和NSBlockOperation,同样我们可以自定义NSOperation,GCD执行任务可以自由组装,没有继承那么高的代码复用度;
6.效率,直接使用GCD效率确实会更高效,NSOperation会多一点开销,但是通过NSOperation可以获得依赖,优先级,继承,键值对观察这些优势,相对于多的那么一点开销确实很划算,鱼和熊掌不可得兼,取舍在于开发者自己;
13.微信支付接入流程
一、 填写商户平台所需资料
二、创建一个项目
三、下载微信终端SDK文件
SDK文件包括 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个。
请前往“资源下载页”下载最新SDK包 摘自http://www.jianshu.com/p/af8cbc9d51b0
网友评论