李洪强经典面试题41-iOS选择题】的更多相关文章

李洪强经典面试题152-Runtime   Runtime Runtime是什么 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [receiver message]; // 底层运行时会被编译器转化为: objc_msgSend(receiver, selector) // 如果其还有参数比如: [receiver message:(id)arg...]; // 底层运行时会被编译器转化为:…
李洪强经典面试题145-Runloop   Runloop 什么是 Runloop? 从字面上讲就是运行循环. 它内部就是do-while循环,在这个循环内部不断地处理各种任务. 一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法) RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Source(Sources0.Sources1).Timer,那么就直接退出RunLoop 基本的作用就是保持程序的持续运行,处理a…
李洪强经典面试题52-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 = 20;…
李洪强经典面试题49-Objective-C 面试笔试都是必考语法知识的.请认真复习和深入研究OC. Objective-C 方法和选择器有何不同?(Difference between method and selector?) selector是一个方法的名字,method是一个组合体,包含了名字和实现. Core Foundation的内存管理 凡是带有Create.Copy.Retain等字眼的函数,创建出来的对象,都需要在最后做一次release 比如CFRunLoopObserver…
李洪强经典面试题136-KVO-KVC   KVC-KVO KVC的底层实现? 当一个对象调用setValue方法时,方法内部会做以下操作: ①检查是否存在相应key的set方法,如果存在,就调用set方法 ②如果set方法不存在,就会查找与key相同名称并且带下划线的成员属性,如果有,则直接给成员属性赋值 ③如果没有找到_key,就会查找相同名称的属性key,如果有就直接赋值 ④如果还没找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方…
李洪强经典面试题53-Swift Swift 网上有很多Swift的语法题,但是Swift现在语法还未稳定,所以在这里暂时不贴出语法题,可以自行搜索. Swift和Objective-C的联系 Swift与Objective-C共用同一套运行时环境我们编写程序,让程序运行起来,被机器执行的代码并非全部是由我们自己来编写的.需要同时运行很多预先写好的支持性的代码,才能让我们自己的代码运行起来.程序并非单独存在的,运行时处在一定的环境当中.我总联想到很多小蚂蚁在泥土上面爬,而我自己写的程序只是其中的…
李洪强经典面试题51-KVO-KVC   KVC-KVO KVC的底层实现? 当一个对象调用setValue方法时,方法内部会做以下操作: ①检查是否存在相应key的set方法,如果存在,就调用set方法 ②如果set方法不存在,就会查找与key相同名称并且带下划线的成员属性,如果有,则直接给成员属性赋值 ③如果没有找到_key,就会查找相同名称的属性key,如果有就直接赋值 ④如果还没找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方法…
n什么是FMDB pFMDB是iOS平台的SQLite数据库框架 pFMDB以OC的方式封装了SQLite的C语言API p nFMDB的优点 p使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 p对比苹果自带的Core Data框架,更加轻量级和灵活 p提供了多线程安全的数据库操作方法,有效地防止数据混乱 p nFMDB的github地址 phttps://github.com/ccgus/fmdb p 核心类 nFMDB有三个主要的类 pFMDatabase ü一个FMDatabase…
可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的一些问题可能并不是C语言问题,但是属于计算机的一些原理性的知识点,所以我就不再另外写一篇文章了,直接写在这里. 当你写下面的代码时会发生什么事? least = MIN(*p++, b); 结果是:((p++) <= (b) ? (p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次…
可能碰到的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.及时聊天app不会采用的网络传输方式是 DA UDP B TCP C Http D FTP 2.下列技术不属于多线程的是 AA Block B NSThread C NSOperation D GCD 3.线程和进程的区别不正确的是 BA 进程和线程都是由操作系统所体会的程序运行的基本单元B 线程之间有单独的地址空间C 进程和线程的主要差别在于它们是不同的操作系统资源管理方式D 线程有自己的堆栈和局部变量 4. 堆和栈的区别正确的是 DA 对于栈来讲,我们需要手工控制,容易产生memory…
iOS 程序员 6 级考试(答案和解释)   我是前言 1. 下面的代码分别输出什么? @implementation Son : Father- (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); NSLog(@"%@", NSStringFromClass([super class])); } return self;}@end 答案…
iOS应用性能调优的25个建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你…
    #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别? #import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关 键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once:@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含:#import<>用来包含系 统的头文件,#im…
如何面试 iOS 工程师   推荐序 私下和很多朋友交流过这个话题,大部分求职者认为,我能做基本的 iOS 开发工作,就达到公司的要求了,殊不知公司招聘员工,更希望的是这个人能够在关键时候能够发挥一般人做不到的能力. 这篇文章是来自微信读书的 bang ,我完全同意他的观点.除了他的这些面试方法外,我还认为做比说更重要,所以我更喜欢在面试的时候,拿出一张白纸,让求职者写一段富有逻辑性的代码,看看他的思维是否严谨,对于一些常见的数据结构和算法基础有了解. 作者介绍:bang,iOS 开发者,推特中…
李洪强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经典面试题下 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经典面试题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.原因是访问了野指针,比如访问已经释放对象的成员变量或…