李洪强iOS经典面试题138-Block】的更多相关文章

李洪强iOS经典面试题156 - Runtime详解(面试必备)   一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数. 对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用. 事实证明: 在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错. 在编译阶段,C语言调用…
李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编译(编译之前处理),const是编译阶段. 编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误. 宏的好处:宏能定义一些函数,方法. const不能. 宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换.…
李洪强iOS经典面试题154- 通知与推送   通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事件,也可能是服务器的新数据.不管是本地通知还是远程通知,他们在程序界面的显示效果相同,都可能显示为一段警告信息或应用程序图标上的微章. 本地通知和远程推送通知的基本目的都是让应用程序能够通知用户某些事情, 而且不需要应用程序在前台运行.二者的区别在于本地通知由本应用负责调用,只能从当前设备上的iOS…
李洪强iOS经典面试题153- 补充   补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模语言.UML因其简单.统一的特点,而且能表达软件设计中的动态和静态信息,目前已成为可视化建模语言的工业标准.在软件无线电系统的开发过程中,统一建模语言可以在整个设计周期中使用,帮助设计者缩短设计时间,减少改进的成本,使软硬件分割最优. 用例图 静态图 行为图 交互图 实现图 如果设计一个交易平台,流…
李洪强iOS经典面试题147-WebView与JS交互   WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:requ…
李洪强iOS经典面试题144-数据存储   数据存储 sqlite中插入特殊字符的方法和接收到处理方法. 除'其他的都是在特殊字符前面加"/",而 ' -> '' .方法:keyWord = keyWord.replace("/","//"); 什么是NSManagedObject模型? NSManagedObjcet是NSObject的子类,Core Date的重要组成部分.是一个通用类,实现了Core Date模型层所需的基本功能,用户…
李洪强iOS经典面试题143-绘图与动画   绘图与动画 CAAnimation的层级结构 CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation 属性解析:keyPath:通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果.比如,指定@"position"…
李洪强iOS经典面试题142-第三方框架及其管理   第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第三方框架. 在终端中进入(cd命令)你项目所在目录,然后在当前目录下,利用vim创建Podfile,运行: $ vim Podfile 然后在Podfile文件中输入以下文字: platform :ios, '9.3' pod "AFNetworking", "~> 2.0…
李洪强iOS经典面试题141-报错警告调试   报错警告调试 你在实际开发中,有哪些手机架构与性能调试经验 刚接手公司的旧项目时,模块特别多,而且几乎所有的代码都写在控制器里面,比如UI控件代码.网络请求代码.数据存储代码 接下来采取MVC模式进行封装.重构 自定义UI控件封装内部的业务逻辑 封装网络请求工具类(降低耦合) 封装数据存储工具类 BAD_ACCESS在什么情况下出现? 这种问题是经常遇到的,在开发时经常会出现BAD_ACCESS.原因是访问了野指针,比如访问已经释放对象的成员变量或…
李洪强iOS经典面试题140-UI   UI viewcontroller的一些方法的说明viewDidLoad,viewWillDisappear, viewWillAppear方法的 顺序和作用? viewWillAppear:视图即将可见时调用.默认情况下不执行任何操作 viewDidAppear:视图已完全过渡到屏幕上时调用 viewWillDisappear:视图被驳回时调用,覆盖或以其他方式隐藏.默认情况下不执行任何操作 viewDidDisappear:视图被驳回后调用,覆盖或以其…
李洪强iOS经典面试题下 21. 下面的代码输出什么? @implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); NSLog(@"%@", NSStringFromClass([super class])); } return self; } @end 答案: 都输出 Son NSS…
李洪强iOS经典面试题上     1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ // https://github.com/ChenYilong // 修改完的代码,这是第一种修改方法,后面会给出第二种修改方法 typedef NS_ENUM(NSInteger, CYLSex) { CYLSexMan, CYLSexWoman }; @interface CYLUser : N…
李洪强iOS经典面试题 1. struct和class的区别 swift中,class是引用类型,struct是值类型.值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指向".所以他们两者之间的区别就是两个类型的区别. class有这几个功能struct没有的: class可以继承,这样子类可以使用父类的特性和方法 类型转换可以在runtime的时候检查和解释一个实例的类型 可以用deinit来释放资源 一个类可以被多次引用 struct也有这样几个优势: 结构较小…
李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理   问题 简单介绍 ARC 以及 ARC 实现的原理. 考查点 ARC 是苹果在 WWDC 2011 提出来的技术,因此很多新入行的同学可能对此技术细节并不熟悉.但是,虽然 ARC 极大地简化了我们的内存管理工作,但是引用计数这种内存管理方案如果不被理解,那么就无法处理好那些棘手的循环引用问题.所以,这道面试题其实是考查同学对于 iOS 程序内存管理的理解深度. 答案 自动的引用计数(Automatic Reference…
李洪强iOS经典面试题37-解释垃圾回收的原理   问题 我们知道,Android 手机通常使用 Java 来开发,而 Java 是使用垃圾回收这种内存管理方式. 那么,ARC 和垃圾回收对比,有什么优点和缺点? 考查点 此题其实是考查大家的知识面,虽然做 iOS 开发并不需要用到垃圾回收这种内存管理机制.但是垃圾回收被使用得非常普遍,不但有 Java,还包括 JavaScript, C#,Go 等语言. 如果两个候选人,一个人只会 iOS 开发,另一个人不但会 iOS 开发,对别的语言或技术也…
李洪强iOS经典面试题35-按层遍历二叉树的节点 问题 给你一棵二叉树,请按层输出其的节点值,即:按从上到下,从左到右的顺序. 例如,如果给你如下一棵二叉树:    3   / \  9  20    /  \   15   7 输出结果应该是: [  [3],  [9,20],  [15,7] ] 代码模版 本题的 Swift 代码模版如下: private class TreeNode {    public var val: Int    public var left: TreeNode…
李洪强iOS经典面试题34-求两个链表表示的数的和 问题 给你两个链表,分别表示两个非负的整数.每个链表的节点表示一个整数位. 为了方便计算,整数的低位在链表头,例如:123 在链表中的表示方式是: 3 -> 2 -> 1 现在给你两个这样结构的链表,请输出它们求和之后的结果.例如: 输入: (2 -> 4 -> 1) + (5 -> 6 -> 1)输出: 7 -> 0 -> 3 代码模版 本题的 Swift 代码模版如下: private class Li…
李洪强IOS经典面试题 33-计算有多少个岛屿 问题 在一个地图中,找出一共有多少个岛屿. 我们用一个二维数组表示这个地图,地图中的 1 表示陆地,0 表示水域.一个岛屿是指由上下左右相连的陆地,并且被水域包围的区域. 你可以假设地图的四周都是水域. 例一: 11110 11010 11000 00000 以上地图,一共有 1 个岛屿. 例二: 11000 11000 00100 00011 以上地图,一共有 3 个岛屿. 答案 这是 LeetCode 上的 第 200 题,我们可以用一种被称为…
李洪强iOS经典面试题32-简单介绍 ARC 以及 ARC 实现的原理 问题 简单介绍 ARC 以及 ARC 实现的原理. 考查点 ARC 是苹果在 WWDC 2011 提出来的技术,因此很多新入行的同学可能对此技术细节并不熟悉.但是,虽然 ARC 极大地简化了我们的内存管理工作,但是引用计数这种内存管理方案如果不被理解,那么就无法处理好那些棘手的循环引用问题.所以,这道面试题其实是考查同学对于 iOS 程序内存管理的理解深度. 答案 自动的引用计数(Automatic Reference Co…
李洪强iOS经典面试题31-解释垃圾回收的原理 问题 我们知道,Android 手机通常使用 Java 来开发,而 Java 是使用垃圾回收这种内存管理方式. 那么,ARC 和垃圾回收对比,有什么优点和缺点? 考查点 此题其实是考查大家的知识面,虽然做 iOS 开发并不需要用到垃圾回收这种内存管理机制.但是垃圾回收被使用得非常普遍,不但有 Java,还包括 JavaScript, C#,Go 等语言. 如果两个候选人,一个人只会 iOS 开发,另一个人不但会 iOS 开发,对别的语言或技术也有兴…
李洪强iOS经典面试题30-一个区分度很大的面试题 考察一个面试者基础咋样,基本上问一个 @property 就够了: @property 后面可以有哪些修饰符? 线程安全的: atomic,nonatomic 访问权限的 readonly,readwrite 内存管理(ARC) assign,strong,weak,copy 内存管理(MRC) assign,retain,copy 指定方法名称 setter= getter= 什么情况使用 weak 关键字,相比 assign 有什么不同?比…
李洪强iOS经典面试题138-Block   Block Block底层原理实现 首先我们来看四个函数 void test1() { int a = 10; void (^block)() = ^{ NSLog(@"a is %d", a); }; a = 20; block(); // 10 } void test2() { __block int a = 10; void (^block)() = ^{ NSLog(@"a is %d", a); }; a =…
  内存管理 ARC处理原理 ARC是Objective-C编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做的只不过是在代码编译时为你自动在合适的位置插入release或autorelease,只要没有强指针指向对象,对象就会被释放. 前端编译器 前端编译器会为"拥有的"每一个对象插入相应的release语句.如果对象的所有权修饰符是__strong,那么它就是被拥有的.如果在某个方法内创建了一个对象,前端编译器会在方法末尾自动插入release语句以销毁它.而类拥有的对象(…
可能碰到的iOS笔试面试题(5)--Objective-C 面试笔试都是必考语法知识的.请认真复习和深入研究OC. Objective-C 方法和选择器有何不同?(Difference between method and selector?) selector是一个方法的名字,method是一个组合体,包含了名字和实现. Core Foundation的内存管理 凡是带有Create.Copy.Retain等字眼的函数,创建出来的对象,都需要在最后做一次release 比如CFRunLoopO…
李洪强iOS经典面试题139-Swift Swift 网上有很多Swift的语法题,但是Swift现在语法还未稳定,所以在这里暂时不贴出语法题,可以自行搜索. Swift和Objective-C的联系 Swift与Objective-C共用同一套运行时环境我们编写程序,让程序运行起来,被机器执行的代码并非全部是由我们自己来编写的.需要同时运行很多预先写好的支持性的代码,才能让我们自己的代码运行起来.程序并非单独存在的,运行时处在一定的环境当中.我总联想到很多小蚂蚁在泥土上面爬,而我自己写的程序只…
可能碰到的iOS笔试面试题(4)--C语言   C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的一些问题可能并不是C语言问题,但是属于计算机的一些原理性的知识点,所以我就不再另外写一篇文章了,直接写在这里. 当你写下面的代码时会发生什么事? least = MIN(*p++, b); 结果是:((p++) <= (b) ? (p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次++自增操作. 用预处理指令#defin…
可能碰到的iOS笔试面试题(3)--UNIX常用命令 做开发说用不到命令行,那肯定是不可能的.所以记住几个常用的命令还是很有用. cd 改变工作目录 pwd 输出当前工作目录的绝对路径在UNIX中要执行什么命令,一定要知道自己当前所在的工作目录 ls 查看文件$ ls 显示文件$ ls -a 显示所有文件$ ls -l 列表显示文件$ ls -la 列表显示所有文件 touch 用于更改文件访问和修改时间的标准UNIX程序,也被用于创建新文件 $ touch test.txt 注意:touch不…
 1.说说响应链 答: 事件响应链.包括点击事件,画面刷新事件等.在视图栈内从上至下,或者从下之上传播. 可以说点事件的分发,传递以及处理.具体可以去看下touch事件这块.因为问的太抽象化了 严重怀疑题目出到越后面就越笼统. 可以从责任链模式,来讲通过事件响应链处理,其拥有的扩展性 2.什么时候使用NSMutableArray,什么时候使用NSArray? 答:当数组在程序运行时,需要不断变化的,使用NSMutableArray,当数组在初始化后,便不再改变的,使用NSArray.需要指出的是…
1. 怎么解决缓存池满的问题(cell) ios中不存在缓存池满的情况,因为通常我们ios中开发,对象都是在需要的时候才会创建,有种常用的说话叫做懒加载,还有在UITableView中一般只会创建刚开始出现在屏幕中的cell,之后都是从缓存池里取,不会在创建新对象.缓存池里最多也就一两个对象,缓存池满的这种情况一般在开发java中比较常见,java中一般把最近最少使用的对象先释放. 2. CAAnimation的层级结构 3. UIButton与UITableView的层级结构 1> 继承结构…
1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; + (id) stringWithCString: (c*****t char*)nullTerminatedCString encoding: (NSStringEncoding)encoding { NSString  *obj; obj = [self alloc…