面试 (一) : iOS基础篇-3(100题21~40)
2017-04-11 00:00
621 查看
#####22.为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?
1
防止循环引用.
如:对象A引用了对象B,对象B引用了对象C,对象C引用了对象B,这个时候B的引用计数是2,而C的引用计数是1,当A不再使用B的时候,就释放了B的所有权,这个时候C还引用对象B,所以B不会释放,引用计数为1,因为B也引用着对象C,B不释放,那么C也就不会被释放,所以他们的引用计数都为1,并且永远不会被释放,形成了循环引用.
#####23.使用UITableView的时候必须要实现的几种方法?
1
2个数据源方法.分别是:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
#####24.写一个遍历构造器.
#####25.UIImage初始化一张图片有几种方法?简述其特点?
1
3种,
imageNamed:系统会先检查系统缓存中是否有该名字的image,如果有的话,则直接返回,如果没有,则先加载图像到缓存,然后再返回.
initWithContentsOfFile:系统不会检查缓存,而直接从文件系统中记载并返回.
imageWithCGImage:scale:orientation 当scale= 1的时候图像为原始大小,orientation指定绘制图像的方向.
#####26.person的retainCount值,并解释为什么?
1
Person * per = [Person alloc]init];
self.person = per;
答:
1或者2.看person是什么类型修饰的.
alloc+1,assign+0,retain+1.
#####27.下面这段代码有何问题?
1
@implementation Person
-(void)setAge:(int)newAge {
self.age = newAge;
}
@end
答:
死循环
#####28.这段代码有什么问题,如何修改
1
#####29.截取字符串"20 | http://www.baidu.com"中,"|"字符前面和后面的数据,分别输出它们。
1
["20 | http://www.baidu.com" componentSeparatedByString:@"|"];
#####30.用obj-c 写一个冒泡排序.
#####31.简述对UIView.UIWindow和CALayer的理解.
1
UIWindow是应用的窗口,继承于UIResponder.
UIView继承于UIView,是创建窗口中的一个视图,可以响应交互事件.一个程序只有一个主window,可以有多个window.
CALayer图层,一个view可有多个图层,不可以响应事件.
#####32.写一个完整的代理,包括声明,实现.
#####33.分析json.xml的区别,底层如何实现?
1
Json:键值对.数据小,不复杂.便于解析,有框架支持,适合轻量级传输.作为数据包个数传输的时候效率更高.
xml:标签套内容.xml数据两较大,比较复杂.适合大数据量的传输.xml有丰富的编码工具,比如:Dom4j,JDom.解析方式有两种,一是通过文芳模型解析,另外一种遍历节点.
#####34.ViewController的didReceiveMemoryWarning是在什么时候被调用的?
1
1.当应用程序的内存使用接近系统的最大内存使用时,应用会向系统发送内存警告,这时候系统会调用方法向所有ViewController发送内存警告.
2.打开系统相机.
3.加载高清图片.
默认操作:把里面没有用的对象进行释放.
#####35.面向对象的三大特征,简单介绍.
1
封装:代码模块化,方便以后调用.
继承:子类继承父类的所有方法和属性.
多态:父类指针指向子类对象.
#####36.重写一个NSString类型的,retain方式声明name属性的setter和getter方法.
1
属性的三大特性:语义特性,原子特性,读写特性.
同时重写setter和getter方法,@synchronized name = _name,关联属性和实例变量. // 我感觉是 @synthesize name = _name;
-(void)setName:(NSString *)name{
if(_name != name){
[_name retain];
[_name release];
_name = name;
}
}
-(NSString *)name{
return [[_name retain]autorelease];
}
#####37.简述NotificationCenter.KVC,KVO,Delegate?并说明它们之间的区别?
1
NotificationCenter:消息中心.消息通知.
KVC:利用键-值间接访问类中的某个属性.
[self setValue:@"123" forKeyPath:@"name"];
NSLog(@"%@",[self valueForKeyPath:@"name"]);
KVO:利用键-路径间接访问类中的某个属性,也就是观察者模式(KVO+通知中心).基于KVC和通知中心,观察的是实例变量.
Delegate:用于多个类之间的传值.
#####38.What is lazy loading?
1
懒加载
#####39.对MVC的理解,好处?
1
MVC:是一种架构.model:数据处理,view:视图显示,controller:逻辑控制,负责视图和模型之间的通信.
高聚合,低耦合,提高代码的复用性.
#####40.监测键盘的弹出.
1
通知.
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector() name:UIKeyboardWillShowNotification object:nil];
1
防止循环引用.
如:对象A引用了对象B,对象B引用了对象C,对象C引用了对象B,这个时候B的引用计数是2,而C的引用计数是1,当A不再使用B的时候,就释放了B的所有权,这个时候C还引用对象B,所以B不会释放,引用计数为1,因为B也引用着对象C,B不释放,那么C也就不会被释放,所以他们的引用计数都为1,并且永远不会被释放,形成了循环引用.
#####23.使用UITableView的时候必须要实现的几种方法?
1
2个数据源方法.分别是:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
#####24.写一个遍历构造器.
+(id)leftModelWith{ leftModel * model = [self alloc]init]; return model; }
#####25.UIImage初始化一张图片有几种方法?简述其特点?
1
3种,
imageNamed:系统会先检查系统缓存中是否有该名字的image,如果有的话,则直接返回,如果没有,则先加载图像到缓存,然后再返回.
initWithContentsOfFile:系统不会检查缓存,而直接从文件系统中记载并返回.
imageWithCGImage:scale:orientation 当scale= 1的时候图像为原始大小,orientation指定绘制图像的方向.
#####26.person的retainCount值,并解释为什么?
1
Person * per = [Person alloc]init];
self.person = per;
答:
1或者2.看person是什么类型修饰的.
alloc+1,assign+0,retain+1.
#####27.下面这段代码有何问题?
1
@implementation Person
-(void)setAge:(int)newAge {
self.age = newAge;
}
@end
答:
死循环
#####28.这段代码有什么问题,如何修改
1
for (int i = 0; i < someLargeNumber; i++) { NSString *string = @”Abc”; string = [string lowercaseString]; string = [string stringByAppendingString:@"xyz"]; NSLog(@“%@”, string); } 加入自动释放池@autoreleasepool{}; for (int i = 0; i < someLargeNumber; i++) { @antoreleasepool { NSString *string = @”Abc”; string = [string lowercaseString]; string = [string stringByAppendingString:@"xyz"]; NSLog(@“%@”, string); } }
#####29.截取字符串"20 | http://www.baidu.com"中,"|"字符前面和后面的数据,分别输出它们。
1
["20 | http://www.baidu.com" componentSeparatedByString:@"|"];
#####30.用obj-c 写一个冒泡排序.
NSMutableArray *ary = [@[@"1", @"2", @"3", @"4", @"6", @"5"] mutableCopy]; for (int i = 0; i < ary.count - 1; i++) { for (int j = 0; j < ary.count - i - 1; j++) { if ([ary[j] integerValue] < [ary[j + 1] integerValue]) { [ary exchangeObjectAtIndex:j withObjectAtIndex:j + 1];// //交换 } } } NSLog(@"%@", ary);
#####31.简述对UIView.UIWindow和CALayer的理解.
1
UIWindow是应用的窗口,继承于UIResponder.
UIView继承于UIView,是创建窗口中的一个视图,可以响应交互事件.一个程序只有一个主window,可以有多个window.
CALayer图层,一个view可有多个图层,不可以响应事件.
#####32.写一个完整的代理,包括声明,实现.
代理:遵守协议的对象. @class MyView; 第一步:指定协议:(协议名:类名+Delegate) @protocol MyViewDelegate <NSObject> @required -(void)changeViewBackgroudColor:(MyView *)view; @optional -(void)test; @end @interface MyView : UIView 第二步:指定代理 @property (nonatomic,assign)id<MyView> delegate; @end 第三步:代理遵循协议. 第四步:代理实现协议里面的必须实现的方法和其他可选方法. 第五步:委托方通知代理开始执行方法.
#####33.分析json.xml的区别,底层如何实现?
1
Json:键值对.数据小,不复杂.便于解析,有框架支持,适合轻量级传输.作为数据包个数传输的时候效率更高.
xml:标签套内容.xml数据两较大,比较复杂.适合大数据量的传输.xml有丰富的编码工具,比如:Dom4j,JDom.解析方式有两种,一是通过文芳模型解析,另外一种遍历节点.
#####34.ViewController的didReceiveMemoryWarning是在什么时候被调用的?
1
1.当应用程序的内存使用接近系统的最大内存使用时,应用会向系统发送内存警告,这时候系统会调用方法向所有ViewController发送内存警告.
2.打开系统相机.
3.加载高清图片.
默认操作:把里面没有用的对象进行释放.
#####35.面向对象的三大特征,简单介绍.
1
封装:代码模块化,方便以后调用.
继承:子类继承父类的所有方法和属性.
多态:父类指针指向子类对象.
#####36.重写一个NSString类型的,retain方式声明name属性的setter和getter方法.
1
属性的三大特性:语义特性,原子特性,读写特性.
同时重写setter和getter方法,@synchronized name = _name,关联属性和实例变量. // 我感觉是 @synthesize name = _name;
-(void)setName:(NSString *)name{
if(_name != name){
[_name retain];
[_name release];
_name = name;
}
}
-(NSString *)name{
return [[_name retain]autorelease];
}
#####37.简述NotificationCenter.KVC,KVO,Delegate?并说明它们之间的区别?
1
NotificationCenter:消息中心.消息通知.
KVC:利用键-值间接访问类中的某个属性.
[self setValue:@"123" forKeyPath:@"name"];
NSLog(@"%@",[self valueForKeyPath:@"name"]);
KVO:利用键-路径间接访问类中的某个属性,也就是观察者模式(KVO+通知中心).基于KVC和通知中心,观察的是实例变量.
Delegate:用于多个类之间的传值.
#####38.What is lazy loading?
1
懒加载
#####39.对MVC的理解,好处?
1
MVC:是一种架构.model:数据处理,view:视图显示,controller:逻辑控制,负责视图和模型之间的通信.
高聚合,低耦合,提高代码的复用性.
#####40.监测键盘的弹出.
1
通知.
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector() name:UIKeyboardWillShowNotification object:nil];
相关文章推荐
- 面试 (一) : iOS基础篇-2(100题1~20)
- 面试 (一) : iOS基础篇-5(100题61~80)
- zt微软面试100题 [机密]21-40
- 面试 (一) : iOS基础篇-4(100题41~60)
- 笔试、面试100题(21---40)
- 面试 (一) : iOS基础篇-6(100题81~100)
- 微软等面试100题系列--(21-40)
- 笔试、面试100题(21---40)
- C++基础知识面试精选100题系列(21-30)[C++ basics]
- iOS应用程序安全(21)-ARM和GDB基础
- 10个Objective-C基础面试题,iOS面试必备
- [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]
- iOS开发UI基础—21使用嵌套模型完成的一个简单汽车图标展示程序
- iOS开发者面试必备:10个Objective-C基础面试题
- [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]
- 黑马程序员——黑马ios入学考试基础视频及面试考到的知识——黑马 ios 技术博客
- 微软等数据结构+算法面试100题(21)--二叉树打印到叶子节点的所有路径
- 【微软谷歌面试100题--【21】从1-n中找出和为m的所有组合
- 测试题1 IOS面试基础题
- [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]