iOS面试题合集(77道)【有答案】IT笔试面试题库

更新时间:2023-05-14 22:05:24 阅读: 评论:0

iOS⾯试题合集(77道)【有答案】IT笔试⾯试题库
1.#import和#include的区别 @class?
@class⼀般⽤于头⽂件中需要声明该类的某个实例变量的时候⽤到,在m⽂件中还是需要使⽤#import
⽽#import⽐起#include的好处就是不会引起交叉编译
2. readwrite,readonly,assign,retain,copy,nonatomic 属性的作⽤
@property是⼀个属性访问声明,扩号内⽀持以下⼏个属性:
1,getter=getName,tter=tName,设置tter与 getter的⽅法名
2,readwrite,readonly,设置可供访问级别
2,assign,tter⽅法直接赋值,不进⾏任何retain操作,为了解决原类型与环循引⽤问题
3,retain,tter⽅法对参数进⾏relea旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
exw4,copy,tter⽅法进⾏Copy操作,与retain处理流程⼀样,先旧值relea,再 Copy出新的对象,retainCount为1。这是为了减少对上下⽂的依赖⽽引⼊的机制。
5,nonatomic,⾮原⼦性访问,不加同步,多线程并发访问会提⾼性能。注意,如果不加此属性,则默认是两个访问⽅法都为原⼦型事务访问。锁被加到所属对象实例级(我是这么理解的…)。
3.在⼀个对象的⽅法⾥⾯:lf.name= “object”;和 name =”object” 有什么不同吗?
答:
lf.name =”object”:会调⽤对象的tName()⽅法;
name = “object”:会直接把object赋值给当前对象的name属性。
4.请简述lf.name= nil的机制,以及与[namerelea]的区别?
lf.name =nil;  //使⽤nil参数调⽤tName:⽅法
[name relea]⽣成的访问器将⾃动释放以前的name对象
5.请简要说明viewDidLoad和viewDidUnload何时调⽤
答:
viewDidLoad在view从nib⽂件初始化时调⽤,
loadView在controller的view为nil时调⽤。
此⽅法在编程实现view时调⽤,view控制器默认会注册memory warning notification,
当view controller的任何view没有⽤的时候,
viewDidUnload会被调⽤,在这⾥实现将retain的view relea,如果是retain的IBOutlet view 属性则不要在这⾥relea,IBOutlet会负责relea 。
6.实例化⼀个UITableView对象,要求写出关键语句?
答:UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(UITableViewStyle)style>];
my.delegate = lf;
my.dataSource = lf;
⾸先需要分配空间设置表格类型
然后需要设置两个必须的委托对象。
linsanity7.使⽤sql语句查询出省名以湖开头,邮编为436001所在的市区?(5分)(表名及字段名⾃定义)
lect*fromcitys where postcode=436001 and province=’湖%’;
8.打印结果
main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf(“%d,%d”,*(a+1),*(ptr-1));
}
答:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5
hhp是什么意思
&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)
int *ptr=(int *)(&a+1);
则ptr实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。
a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以ptr实际是a[5]
但是prt与(&a+1)类型是不⼀样的(这点很重要)
所以prt-1只会减去sizeof(int*)
a,&a的地址是⼀样的,但意思不⼀样
a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,
a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5].
void Func ( char str[100] )
{
sizeof(str ) = ?
}
void*p = malloc( 100 ); sizeof( p ) = ?
这题很常见了,Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本⾝的内涵,仅仅只是⼀个指针;在失去其内涵的同时,它还失去了其常量特性,可以作⾃增、⾃减等操作,可以被修改。Windows NT 32位平台下,指针的长度(占⽤内存的⼤⼩)为4字节,故sizeof( str ) 、sizeof( p ) 都为4。
9.⽤预处理指令#define声明⼀个常数,⽤以表明1年中有多少秒(忽略闰年问题)
答:#defineSECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
我在这想看到⼏件事情:
#define 语法的基本知识(例如:不能以分号结束,括号的使⽤,等等)
懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算⼀年中有多少秒⽽不是计算出实际的值,是更清晰⽽没有代价的。
意识到这个表达式将使⼀个16位机的整型数溢出-因此要⽤到长整型符号L,告诉编译器这个常数是的长整型数。
如果你在你的表达式中⽤到UL(表⽰⽆符号长整型),那么你有了⼀个好的起点。记住,第⼀印象很重要。
10.写⼀” 标准”宏MIN ,这个宏输⼊两个参数并返回较⼩的⼀个
答:#define MIN(A,B) ((A) <= (B) ? (A) : (B))
这个测试是为下⾯的⽬的⽽设的:
标识#define在宏中应⽤的基本知识。这是很重要的,因为直到嵌⼊(inline)操作符变为标准C的⼀部分,宏是⽅便产⽣嵌⼊代码的唯⼀⽅
flag是什么意思中文法,对于嵌⼊式系统来说,为了能达到要求的性能,嵌⼊代码经常是必须的⽅法。
三重条件操作符的知识。这个操作符存在C语⾔中的原因是它使得编译器能产⽣⽐ if-then-el 更优化的代码,了解这个⽤法是很重要的。懂得在宏中⼩⼼地把参数⽤括号括起来我也⽤这个问题开始讨论宏的副作⽤,例如:当你写下⾯的代码时会发⽣什么事?  least = MIN(*p++, b);
结果是:
((*p++) <= (b) ? (*p++) :(*p++))
这个表达式会产⽣副作⽤,指针p会作三次++⾃增操作。
11.数组和指针的区别
(1)数组可以申请在栈区和数据区;指针可以指向任意类型的内存块
(2)sizeof作⽤于数组时,得到的是数组所占的内存⼤⼩;作⽤于指针时,得到的都是4个字节的⼤⼩
(3)数组名表⽰数组⾸地址,值不可以改变,如不可以将++作⽤于数组名上;普通指针的值可以改变,如可将++作⽤于指针上
(4)⽤字符串初始化字符数组是将字符串的内容拷贝到字符数组中;⽤字符串初始化字符指针是将字符串的⾸地址赋给指针,也就是指针指向了该数组
12.static的作⽤
(1)函数体内static 变量的作⽤范围为该函数体,不同于 auto 变量,该变量的内存只被分配⼀次,
因此其值在下次调⽤时仍维持上次的值;
(2)在模块内的static 全局变量可以被模块内所⽤函数访问,但不能被模块外其它函数访问;
(3)在模块内的static 函数只可被这⼀模块内的其它函数调⽤,这个函数的使⽤范围被限制在声明
它的模块内;
(4)在类中的static 成员变量属于整个类所拥有,对类的所有对象只有⼀份拷贝;
(5)在类中的static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因⽽只能访问类的stati
中口c 成员变量。
13.简述内存分区情况
(1)代码区:存放函数⼆进制代码
(2)数据区:系统运⾏时申请内存并初始化,系统退出时由系统释放。存放全局变量、静态变量、常量
(3)堆区:通过malloc等函数或new等操作符动态申请得到,需程序员⼿动申请和释放
(4)栈区:函数模块内申请,函数结束时由系统⾃动释放。存放局部变量、函数参数
14.#include<filename>和#include”filename”有什么区别
答:#include<filename>直接在库⽂件⽬录中搜索所包含的⽂件;#include”filename”在当前⽬录下搜索所包含的⽂件,如果没有的话再到库⽂件⽬录搜索。
答:(1)定义了⼀个指向不可变的字符串的字符指针
(2)和(1)⼀样
(3)定义了⼀个指向字符串的指针,该指针值不可改变,即不可改变指向
(4)定义了⼀个指向不可变的字符串的字符指针,且该指针也不可改变指向
16.MVC的理解?
答:MVC模式考虑三种对象:模型对象、视图对象和控制器对象。模型对象负责应⽤程序的数据和定义操作数据的逻辑;视图对象知道如何显⽰应⽤程序的模型数据;控制器对象是M与V之间的协调者。
17.在Obj-c中有没有私有⽅法?私有变量?⼀般采⽤什么⽅法实现?
objective-c – 类⾥⾯的⽅法只有两种, 静态⽅法和实例⽅法. 这似乎就不是完整的⾯向对象了,按照OO的原则就是⼀个对象只暴露有⽤的东西. 如果没有了私有⽅法的话, 对于⼀些⼩范围的代码重⽤就不那么顺⼿了. 在类⾥⾯声名⼀个私有⽅法@interfaceController : NSObject { NSString *something; }
+(void)thisIsAStaticMethod;
-(void)thisIsAnInstanceMethod;
@end
@interfaceController (private)
-(void)thisIsAPrivateMethod;
@end
@private可以⽤来修饰私有变量
在Objective‐C中,所有实例变量默认都是私有的,所有实例⽅法默认都是公有的
18.OC中加号⽅法与减号的区别?
加号⽅法是类⽅法,属于静态⽅法
减号⽅法是实例⽅法必须由类的实例来调⽤
19.free与relea的区别
20.在终端环境下,分别说明4,2,1,0对应的权限是什么
21.ARC机制
ARC就是automatic reference counting ,简单说就是就是代码中⾃动加⼊了retain/relea,原先需要⼿动添加的⽤来处理内存管理的引⽤计数的代码可以⾃动地由编译器完成了。
使⽤ARC的好处
使⽤ARC有什么好处呢?
看到上⾯的例⼦,⼤家就知道了,以后写Objective-C的代码变得简单多了,因为我们不需要担⼼烦⼈的内存管理,担⼼内存泄露了
代码的总量变少了,看上去清爽了不少,也节省了劳动⼒
代码⾼速化,由于使⽤编译器管理引⽤计数,减少了低效代码的可能性
不好的地⽅
记住⼀堆新的ARC规则—关键字及特性等需要⼀定的学习周期
⼀些旧的代码,第三⽅代码使⽤的时候⽐较⿇烦;修改代码需要⼯数,要么修改编译开关
22.⾃动释放池是什么,如何⼯作
当您向⼀个对象发送⼀个autorelea 消息时,Cocoa就会将该对象的⼀个引⽤放⼊到最新的⾃动释放池。它仍然是个正当的对象,因此⾃动释放池定义的作⽤域内的其它对象可以向它发送消息。当程序执⾏到作⽤域结束的位置时,⾃动释放池就会被释放,池中的所有对象也就被释放。
1. ojc-c 是通过⼀种”referring counting”(引⽤计数)的⽅式来管理内存的, 对象在开始分配内存(alloc)的时候引⽤计数为⼀,以后每当碰到有copy,retain的时候引⽤计数都会加⼀, 每当碰到relea和autorelea的时候引⽤计数就会减⼀,如果此对象的计数变为了0, 就会被系统销毁.
2. NSAutoreleaPool 就是⽤来做引⽤计数的管理⼯作的,这个东西⼀般不⽤你管的.
3. autorelea和relea没什么区别,只是引⽤计数减⼀的时机不同⽽已,autorelea会在对象的使⽤真正结束的时候才做引⽤计数减⼀.
23.ViewController 的 loadView, viewDidLoad,viewDidUnload 分别是在什么时候调⽤的?在⾃定义ViewController的时候这⼏个函数⾥⾯应该做什么⼯作?
viewDidLoad在view 从nib⽂件初始化时调⽤,loadView在controller的view为nil时调⽤。此⽅法在编程实现view时调
personality是什么意思
bec剑桥商务英语⽤,view 控制器默认会注册memory warning notification,当view controller的任何view 没有⽤的时候,viewDidUnload会被调⽤,在这⾥实现将retain 的view relea,如果是retain的IBOutlet view 属性则不要在这⾥relea,IBOutlet会负责relea 。
24. 浅复制和深复制的区别?//浅拷贝和深拷贝
答案:
浅层复制(copy):只复制指向对象的指针,⽽不复制引⽤对象本⾝。//通过对象的指针来访问这个对象
深层复制(mutableCopy):复制引⽤对象本⾝意思就是有个A对象,复制⼀份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同⼀个内存资源,复制的只不过是是⼀个指针,对象本⾝资源还是只有⼀份,那如果我们对
A_copy执⾏了修改操作,那么发现A引⽤的对象同样被修改,这其实违背了我们复制拷贝的⼀个思想。深复制就好理解了,内存中存在了两份独⽴对象本⾝。//当修改A时,A copy不变。
25. frame和bounds有什么不同?
皇家墨尔本理工大学
曲阜师范大学分数线答案:frame指的是:该view在⽗view坐标系统中的位置和⼤⼩。(参照点是⽗亲的坐标系统)//frame:框架、结构
bounds指的是:该view在本⾝坐标系统中的位置和⼤⼩。(参照点是本⾝坐标系统)//bounds:界限
26. obj-c的优缺点
答案:
objc优点:
1) Cateogies
2) Posing
3) 动态识别
4) 指标计算
5)弹性讯息传递
6) 不是⼀个过度复杂的 C 衍⽣语⾔
7) Objective-C 与 C++ 可混合编程alaways
缺点:
1) 不⽀援命名空间
2)  不⽀持运算符重载
3)不⽀持多重继承

本文发布于:2023-05-14 22:05:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/632704.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   指针   函数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图