iOS面试知识点整理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可
能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么
我为什么还要如此看重关键字 const 呢?我也如下的几下理由:
(2)通过给优化器一些附加的信息,使用关键字 const 也许能产生更紧凑的代
9. 写一个简单的代理,实现两个页面的反向传值
10. 写一个简单的 block,实现两个页面的反向传值
11. @class 的作用是什么 申明一个类
12 写一个单例方法 +(id)shareInstance {
static BlockViewControl * blockVC = nil; @synchronized(self) {
objectAtIndex:j]]; [aData replaceObjectAtIndex:j withObject:temp]; count ++;
冒泡排序
-(void)sort2:(NSMutableArray *)resource {
//NSNumber 小小 -> 大大 int count = [resource count]; for(int i = 0; i < count-1; i ++) {
计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。 被封装的对象通常被称为抽象数据类型。
继承:继承一个父类,有其父类的所有方法和属性,继承主要实现重用代码, 节省开发时间。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结 果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
码。
(3)合理地使用关键字 const 可以使编译器很自然地保护那些不希望被改变的
参数,防止其被无意的代码修改。简而言之,这样可以减少 bug 的出现。
üü 堆和栈的区别 一个由 c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的 值等.其操作方式类似于数据结构中的栈. 2、堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能
for(int j = i+1; j < [aData count];j++) {
if([[aData objectAtIndex:i] integerValue] < [[aData objectAtIndex:j]integerValue])
{ NSNumber *temp = [aData objectAtIndex:i]; [aData replaceObjectAtIndex:i withObject:[aData
前两个的作用是一样,a 是一个常整型数。第三个意味着 a 是一个指向常整型
数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思 a 是一
个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针
是不可修改的)。最后一个意味着 a 是一个指向常整型数的常指针(也就是说,
指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能
5. 重载和重写的区别 重写:子类方法覆盖父类方法,要求方法名和参数都要一样。
重载:同一个类的两个以及以上的方法,拥有相同的方法名,但是参数不一 样,方法体也不一样,最常见例子就是类的重构函数。
6. OC 有没有私有方法? 如果没有怎么实现方法的私有化 严格来说 OC 没有私有方法,最简单就是在.m 中定义方法而不是在.h 中。
withObject:[resource objectAtIndex:j+1]]; [resource replaceObjectAtIndex:j+1
withObject:temp];
üü 你常用的数据结构有哪些
1. 整型 (int) 浮点型 (float, double) 短长整型(short, long) 2. 字符串 NSString* 与 char* 3. 布尔值 4. 数组与字典 üü 写一个单链表
(1) 设置变量的存储域,函数体内 static 变量的作用范围为该函数体,该变量
的内存制备分配一次,因此值在下次调用是仍维持上次的值。
(2) 限制编制的作用域,在模块的 static 全局变量只可以被这一模块内的其他
函数调用,这个函数的使用范围被限制在声明它的模块内。
(3) 限制函数的作用域,同上。
(4) 在类中 static 成员变量意味着被它被该类所有实例所共享,也就是说某个
类的实例修改了该静态成员变量,其修改值为该类的其他所有实例所见。
(5) 在类中的 static 成员属于整个类所有,这个函数不接受 this 指针,因此只
能访问类的 static 成员变量。
üü 关键字 const 有什么含意
retain:强指针,retainCount +1 copy: 浅拷贝,并 retainCount +1。 strong:有 arc 后导入的,强指针,retainCount +1;(等价于 retain) weak:有 arc 后导入的,弱指针,retainCount 不+1, 只能描述对象,并且 最后会将该对象设置为 nil 来防止野指针。
3. 什么是面向对象,和面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一
步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了
完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游
insert->next = NULL; temp->next = insert; }
//删除 void delete_1(struct QFInfo *head,struct QFInfo *del) {
struct QFInfo *temp = head->next; while (temp->next != NULL && temp->next != del) {
dispatch_once(&onceToken, ^{ blockVC = [[BlockViewControl alloc]init];
üü int *p 中 *p 和 p 的分别代表什么 *p:该指针指向变量的值 p:一个指向某个内存块的一个变量
üü 写算法对一个长度为 n 的数组 a 进行升序排序
选择排序
-(void)bunbleSort:(NSMutableArray *)aData {
int count = 0; for(int i = 0; i < [aData count]-1;i++) {
iOS 面试常问知识点(必备)
1、 C 知识点
üü 写一个标准宏 MIN, 这个宏输入两个参数 A、B,并返回较小的一个
#define MIN(a,b) ((a>b)?(b):(a))
üü 关键字 static 的作用是什么
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是 绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出 现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简 化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图 的统一。
4. 分别讲一下你对面向对象中封装、继承、多态的理解 封装:把东西抽离出来一个类,提供 api 接口,封装是实现面向对象程序设
temp = temp->next; }
üü 队列和栈的区别 栈:先进后出 队列:先进先出
üü 其他
2、 OC 知识点
1. OC 字符串和 C 字符串的区别 OC 字符串是对象 C 字符串是字符数组
2. OC 数组和 C 数组的区别 oc 的数组是系统封装好的对象。 c 的数组则是连续的内存空间。
(1)简单说:意味着只读
const int a;
பைடு நூலகம்
int const a;
const int *a;
int * const a;
int const * a const;
戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画 面,7、判断输赢,8、返回步骤 2,9、输出最后结果。把上面每个步骤用分 别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面, 3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责 接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象 接收到了棋子的 i 变化就要负责在屏幕上面显示出这种变化,同时利用第三 类对象(规则系统)来对棋局进行判定。
7. #import 和#include 的区别 #import 也是导入头文件,已经预处理。需要导入 foundation。
8. OC 内存管理的机制是什么? assign、retain、copy、strong 、weak 的区别? OC 内存管理机制是 ARC,自动引用计数器.
assign:用于非指针类型变量,基本数据类型,C 数据类型。若描述 id 类型, retainCount 不+1;
for(int j = 0; j < count-i-1; j ++)
{
if([[resource objectAtIndex:j] integerValue]> [[resource objectAtIndex:j+1] integerValue])
{ NSNumber *temp = [resource objectAtIndex:j]; [resource replaceObjectAtIndex:j
//链表尾 void insert_AtEnd(struct QFInfo *head,struct QFInfo *insert) {
struct QFInfo *temp = head->next; while (temp->next != NULL) {
temp = temp->next; }
if (blockVC == nil) { blockVC = [[BlockViewControl alloc]init];
} } return blockVC; } GCD 方式: +(id)shareInstance { static BlockViewControl * blockVC = nil; static dispatch_once_t onceToken;
由 OS 回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表 üü 不用第三个参数来交换 A、B 两个变量的值 (1) a=a^b b=a^b a=a^b (2) a=a+b b=a-b a=a-b
üü break、return 和 continue 的区别 break 是直接跳出整个循环体 return 直接跳出函数 continue 则是跳出当前循环,到下一循环
struct QFInfo {
int num; struct QFInfo *next; };
struct QFInfo *qfinfo;
//链表头 void insert_AtFirst(struct QFInfo *head,struct QFInfo *insert) {
insert->next = head->next; head->next = insert; }