iOS 面试题 2
1、 描述应用程序的启动顺序。
1、程序入口main函数创建UIApplication实例和UIApplication代理实例
2、在UIApplication代理实例中重写启动方法,设置第一ViewController
3、在第一ViewController中添加控件,实现对应的程序界面。
2.为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。
防止循环引用,
Student * str=[];
Teacher *teacher=[[Teacher
alloc] init];
Student *
student=[[Student alloc] init];
teacher.delegate=student;
student.delegate=
teacher;
在teacher中dealloc会release当前的Delegate,就会触发student对象release,继而也会导致student执行dealloc,在student中也会release自己的delegate,产生循环了。
3、
使用UITableView时候必须要实现的几种方法?
2个。
-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section;这个方法返回每个分区的行数
-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath)indexPath;这个方法返回我们调用的每一个单元格
4、 写一个便利构造器。
+(id)leftModelWith{
leftModel * model = [self alloc]init];
return model;
}
5、
UIImage初始化一张图片有几种方法?简述各自的优缺点。
3种,
imageNamed:系统会先检查系统缓存中是否有该名字的image,如果有的话,则直接返回,如果没有,则先加载图像到缓存,然后再返回.
initWithContentsOfFile:系统不会检查缓存,而直接从文件系统中记载并返回.
imageWithCGImage:scale:orientation 当scale= 1的时候图像为原始大小,orientation指定绘制图像的方向.
参考(http://blog.csdn.net/jerryvon/article/details/7526147#)
6、 回答person的retainCount值,并解释为什么
Person *
per = [[Person alloc] init];
self.person = per;
1或者2.看person是什么类型修饰的.
alloc+1,assign+0,retain+1.
7、
这段代码有什么问题吗:
@implementation Person
- (void)setAge:(int)newAge {
self.age = newAge;
}
@end
死循环
8、
这段代码有什么问题,如何修改
for (int i = 0; i < someLargeNumber; i++) {
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [string
stringByAppendingString:@"xyz"];
NSLog(@“%@”,
string);
}
如果数字很大的话会造成内存一直增加(因为一直通过便利构造器方法创建autorelease对象),直到循环结束才减少,在循环内加一个自动释放池,更改后代码如下:
for (int i = 0; i < someLargeNumber; i++) {
NSString *string = @”Abc”;
@autoreleasepool {
string =
[string lowercaseString];
string =
[string stringByAppendingString:@"xyz"];
NSLog(@“%@”,
string);
}
}
9、
截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们。
NSString *string = @”
20 | http://www.baidu.com”;
[string componentsSeparatedByString:@”|”];
10、
用obj-c写一个冒泡排序
1. NSMutableArray
*array = [NSMutableArray
arrayWithArray:@[@"3",@"1",@"10",@"5",@"2",@"7",@"12",@"4",@"8"]];
NSString *tmp;
for (int i = 0; i < array.count; i ++) {
for (int j = 0; j < array.count
- 1 - i; j++) {
if ([[array objectAtIndex:j]
integerValue] > [[array objectAtIndex:j + 1] integerValue]) {
tmp = [array objectAtIndex:j];
[array
replaceObjectAtIndex:j withObject:[array objectAtIndex:j + 1]];
[array replaceObjectAtIndex:j +
1 withObject:tmp];
}
}
}
||
2.
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);
11、 简述你对UIView、UIWindow和CALayer的理解
UIWindow是应用的窗口,继承于UIResponder.一个程序只有一个主window,可以有多个window.
UIView继承于UIResponder, UIResponder继承于NSObject,是创建窗口中的一个视图,可以响应交互事件.
CALayer继承于NSObject,所以CALayer不能响应事件,CALayer是用来绘制内容的,对内容进行动画处理依赖于UIView来进行显示,一个view可有多个图层
12、 写一个完整的代理,包括声明,实现
代理:遵守协议的对象.
@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
第三步:代理遵循协议.
第四步:代理实现协议里面的必须实现的方法和其他可选方法.
第五步:委托方通知代理开始执行方法.
13、
分析json、xml的区别?json、xml解析方式的底层是如何处理的?
Json:键值对.数据小,不复杂.便于解析,有框架支持,适合轻量级传输.作为数据包个数传输的时候效率更高.
xml:标签套内容.xml数据量较大,比较复杂.适合大数据量的传输.解析方式有两种,DOM和SAX,DOM需要读入整个XML文档(文档驱动),SAX是事件驱动的,并不需要读入整个文档,文档的读入过程也就是SAX的解析过程。
14、 ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?
1.当应用程序的内存使用接近系统的最大内存使用时,应用会向系统发送内存警告,这时候系统会调用方法向所有ViewController发送内存警告.
2.打开系统相机.
3.加载高清图片.
默认操作:把里面没有用的对象进行释放.
15、 面向对象的三大特征,并作简单的介绍
封装、继承、多态。
封装:代码模块化,方便以后调用.
继承:子类继承父类的所有方法和属性.
多态:父类指针指向子类对象.
16、
重写一个NSStrng类型的,retain方式声明name属性的setter和getter方法
属性的三大特性:语义特性,原子特性,读写特性.
同时重写setter和getter方法,@synchronized name = _name,关联属性和实例变量.
- (void)setName:(NSString *)name{
if(_name != name){
[_name retain];
[_name release];
_name = name;
}
}
- (NSString *)name{
return [[_name retain]autorelease];
}
17、
简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?
NotificationCenter:消息中心.消息通知.
KVC:利用键-值间接访问类中的某个属性.而不是通过调用getter和setter方法访问。
[self setValue:@"123" forKeyPath:@"name"];
NSLog(@"%@",[self valueForKeyPath:@"name"]);
KVO:利用键-路径间接访问类中的某个属性,也就是观察者模式(KVO+通知中心).观测指定对象的属性,当指定对象的属性更改之后会通知相应的观察者。
Delegate:用于多个类之间的传值.delegate遵循某个协议并实现协议声明的方法。
18、
What is lazy
loading?
懒加载,在使用的时候才去初始化,比如UITableViewCell的imageView属性,懒加载对象的创建是在setter方法里面进行创建的。
19、
什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?
协议提供了一组方法,但是并不负责实现,如果一个类遵循了某个协议,并且实现了协议里面的方法,那么我们称这个类就是遵循了某个协议的代理。属性的声明使用assign,防止出现循环引用的问题。
20、
分别描述类别(categories)和延展(extensions)是什么?以及两者的区别?继承和类别在实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?
category类目:在不知道源码的情况下为一个类扩展方法,extension:为一个类声明私有方法和变量。
继承是创建了一个新的类,而类别只是对类的一个扩展,还是之前的类。
类目的作用就是为已知的类添加方法。
21、 Objective-C有私有方法么?私有变量呢?如多没有的话,有没有什么代替的方法?
objective-c – 类里面的方法只有两种, 静态方法和实例方法.
@private来修饰私有变量
OC中所有的实例变量默认都是私有的,所有的实例方法默认都是公有的。
22、
#import、#include和@class有什么区别
#include
c语言中引入一个头文件,但是可能出现交叉编译
#import在OC中引入自己创建的头文件#import””或者系统框架#import<>。#import不会出现交叉编译
@class对一个类进行声明,告诉编译器有这个类,但是类的定义什么的都不知道
23、
谈谈你对MVC的理解?为什么要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其他的OC设计模式或别的设计模式吗?
单例模式,delegate设计模式,target-action设计模式
24、 如监测系统键盘的弹出
通知.
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector() name:UIKeyboardWillShowNotification object:nil];
25、 举出5个以上你所熟悉的ios sdk库有哪些和第三方库有哪些?
系统库:UIKit框架:负责应用程序的图形及事件驱动的关键基础,如:用户界面管理,图形和窗口支持.
Mapkit框架:地图.
Message UI框架:电子邮件
AV Foundation框架:可用于音频播放.
OpenAL框架:用于播放,可播放高质,高性能的网络音频
Core Data框架:将数据存储在SQLite数据库.
Core Media框架:播放视频.
第三方:SDWebImage :简化图片处理
ShareSDK 分享
SVProgressHUD 轻量级菊花
AFNetworkin 方便网络开发
FreeStreamer 播放音频
26、
如何将产品进行多语言发布?
程序的国际化
27、
如何将敏感字变成**
字符串替换stringByReplacingOccurrencesOfString:
withString:
28、
objc中的减号与加号代表什么?
+静态方法,也叫类方法,-实例方法
29、
单例目的是什么,并写出一个?
当一个类只能有一个实例的时候需要使用单例。
static SortDetailsModelDown * single = nil;
+(SortDetailsModelDown *)shareSortDetailsModelDown{
@synchronized(self){
if (!single) {
single = [[SortDetailsModelDown alloc]init];
}
}
return single;
}
30、 说说响应链
当事件发生的时候,响应链首先被发送给第一个响应者(往往是事件发生的视图,也就是用户触摸屏幕的地方)。事件将沿着响应者链一直向下传递,直到被接受并作出处理。一般来说,第一响应这是个视图对象或者其子类,当其被触摸后事件就交由它处理,如果他不处理,时间就会被传递给视图控制器对象UIViewController(如果存在),然后是它的父视图对象(superview),以此类推直到顶层视图。接下来会沿着顶层视图(top
view)到窗口(UIwindow 对象) 再到程序的(UIApplication对象),如果整个过程都没有响应这个事件,则该事件被丢弃,一般情况下,在响应链中只要有对象处理事件,事件就会被传递
典型的响应路线图如:
First Responser --> The
Window -->The Applicationn --> App Delegate
iOS 面试题 2的更多相关文章
- 最全的iOS面试题及答案-转载
1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现 ...
- IOS面试题总结
iOS面试题: 一:网络理论知识的理解 1:Internet物理地址和IP地址转换采用什么协议 ARP(Address Resolution Protocol)地址解析协议 2:Internet采用哪 ...
- iOS面试题及答案2015.6.7
iOS面试题及答案 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承 ...
- iOS 面试题 总结
#include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc&q ...
- [转载]iOS面试题总
转载自:http://blog.sina.com.cn/s/blog_67eb608b0101r6xb.html (2014-06-13 20:23:33) 转载▼ 标签: 转载 crash 原文 ...
- 试答卓同学的 iOS 面试题
卓同学昨天写了一篇文章<4道过滤菜鸟的iOS面试题>.我手痒决定默写一个参考答案.后来发现不认真回答被大家喷成狗,所以决定积极改造,重新做人.下面就是修编之后的答案. 1. struct和 ...
- iOS面试题大全-点亮你iOS技能树
所有的内容大部分来自于网络的搜集,所以我不是一个创造者,而是一个搬运工.我尽量把题目,尤其是参考答案的出处列明.若有任何疑问,建议,意见,请联系我. 第一部分面试题来源于iOS-Developer-I ...
- 原 iOS面试题收集
原 iOS面试题收集 发表于2年前(2013-07-22 13:47) 阅读(369) | 评论(0) 4人收藏此文章, 我要收藏 赞0 听云性能监测产品App.Server.CDN免费试用,绑定 ...
- ios 面试题 经典(比较全) 根据重点总结
史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...
- YouKu iOS笔试题一
序言 最近收到某某同学将去youku的iOS笔试题的邮件,希望笔者能整理一下,并提供参考答案.笔者决定整理出来,并分享给大家.当然,与此同时,也想看看youku的笔试题到底有多难,也考考自己有多少料吧 ...
随机推荐
- C#传值
C#若不加限制传值时自带的类型为值传递,自创的类型为引用传递 using System; using System.Collections.Generic; using System.Linq; us ...
- Spring中的WebDataBinder浅析
Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int,String等).如果传递过来 ...
- C#设置textboox只能输入数字`
1.在闪电KeyPress事件中添加 private void textBox_pwmx_fre_KeyPress(object sender, KeyPressEventArgs e) { //如果 ...
- DOM 节点属性
DOM 节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeT ...
- 简单说pyglet.event
emitter,就是pyglet.event.EventDispatcher的子类, 负责发出事件的消息,并且规定了响应消息的函数名. class Consumer(pyglet.event.Even ...
- AngularJS中的控制器示例_2
<!doctype html> <html ng-app="myApp"> <head> <script src="C:\\Us ...
- sql数据库监控语句
--查找被阻塞进程 --查找阻塞头进程 and exists ( from master..sysprocesses where blocked =p.spid) --查找等待时间长的进程 order ...
- 如何在Latex上裁减图片
在Latex的使用过程中,很多人需要载入一些具有一定白边或者边框的图片.特别是用matlab生成的很多图片.大部分人的做法是通过使用pdf工具去裁减.这样做很麻烦,并且对于一些批量的,大小相同的图片而 ...
- 《Programming WPF》翻译 第9章 5.默认可视化
原文:<Programming WPF>翻译 第9章 5.默认可视化 虽然为控件提供一个自定义外观的能力是有用的,开发者应该能够使用一个控件而不用必须提供自定义可视化.这个控件应该正好工作 ...
- 统计useragent和页面情况