iOS 面试题整理(带答案)二
第一篇面试题整理:
http://www.cocoachina.com/bbs/read.php?tid-459620.html
本篇面试题同样:如答案有问题,欢迎指正!
1.回答person的retainCount值,并解释为什么
Person * per = [[Person alloc] init];
self.person = per;
2
2.这段代码有什么问题吗:
@implementation Person
- (void)setAge:(int)newAge {
self.age = newAge;
}
@end
正确写法
{
if(_age){
[_age release];
}
_age = [newAge retain];
}
死循环(扩展:知道如何正确写setter和getter方法)
3.这段代码有什么问题,如何修改
for (int i = 0; i < someLargeNumber; i++) {
NSString *string = @”Abc”;//常量区
string = [string lowercaseString];//新的堆区
string = [string stringByAppendingString:@"xyz"];//新的堆区
NSLog(@“%@”, string);
}
在for循环里添加自动释放池(扩展:常量区的retaincount是怎么个情况)
4.截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们。
componentsSeparatedByString
NSString * str = @“20|http://www.baidu.com”;
for(NSString*s in [str componentsSeparatedByString]){
NSLog(@“%@“,s);
}
5.用obj-c写一个冒泡排序
for(int i = 0, i < arr.count - 1,i++){
for (int j = 0,j < arr.count - 1 - i;j++){
int a = [[arr objectAtIndex:j]intValue];
int b=[[arr objectAtIndex:j+1]intValue];
if(a < b){
[arr replaceObjectAtIndex:j withObject:[NSString stringWithFormat:@“%d”,b]];
[arr replaceObjectAtIndex:j+1 withObject:[NSString stringWithFormat:@“%d”,a];
}}}
6.简述你对UIView、UIWindow和CALayer的理解
http://blog.csdn.net/kuqideyupian/article/details/7731942
http://o0o0o0o.iteye.com/blog/1728599
7.写一个完整的代理,包括声明,实现
注意手写的准确性
8.分析json、xml的区别?json、xml解析方式的底层是如何处理的?
http://www.open-open.com/bbs/view/1324367918671
http://hi.baidu.com/fevelen/item/a25253ab76f766756cd455b6
9.ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?
http://blog.sina.com.cn/s/blog_68661bd80101nn6p.html
10.面向对象的三大特征,并作简单的介绍
封装、继承、多态
多态:父类指针指向子类对象。两种表现形式:重写(父子类之间)和重载(本类中)
OC的多态体现是:重写,没有重载这种表现形式
举例说明:
@interface Parent : NSObject //父类
- (void)simpleCall;
@end
@interface Child_A : Parent //子类 Child_A
@end
@implementation Child_A
- (void)simpleCall
{
NSLog(@"我是Child_A的simpleCall方法");
}
@end
@interface Child_B : Parent //子类Child_B
@end
- (void)simpleCall
{
NSLog(@"我是Child_的simpleCall方法");
}
@end
然后,我们就可以看到多态所展示的特性了:
Parent * pa=[[Child_A alloc] init];// 父类指针指向子类Child_A对象
Parent * pb=[[Child_B alloc] init]; //父类指针指向子类Child_B对象
[pa simpleCall];// 显然是调用Child_A的方法
[pb simpleCall];// 显然是调用Child_B的方法
在OC中常看见的多态体现:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellWithIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellWithIdentifier];
return cell;
}
(UITableViewCell *)指向cell子类对象
11.重写一个NSString类型的,retain方式声明name属性的setter和getter方法
-(void)settetName:(NSString *)name{
if(_name){
[_name release];
}
_name = [name retain];
}
-(NSString *)getterName{
return [[_name retain]autorelease];
12.简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?
http://blog.csdn.net/zuoerjin/article/details/7858488
http://blog.sina.com.cn/s/blog_bf9843bf0101j5px.html
13.What is lazy loading?
懒汉模式,只在用到的时候才去初始化。也可以理解成延时加载。我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。一个延时载,避免内存过高,一个异步加载,避免线程堵塞
14.什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?
委托的property声明用什么属性是assign(防止循环引用)
15.分别描述类别(categories)和延展(extensions)是什么?以及两者的区别?继承和类别在实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?
考虑类目比继承的优点
类别是把类的实现方法分散到不同的文件中 也可以给类扩展新方法
延展是给类添加私有方法 只为自己类所见 所使用
继承可以扩展实例变量 而类别不能
类别如果可以添加成员变量 就跟继承没什么两样了 而且在上线的项目更新中 用类别笔继承更能维护项目的稳定性
16.Objective-C有私有方法么?私有变量呢?如多没有的话,有没有什么代替的方法?
oc没有私有方法 但是有私有变量@property 私有方法可以用延展代替
17.#import、#include和@class有什么区别
#import 系统文件、自定义文件引用 不用担心重复引用的问题
#include 跟#import几乎一样 但是他需要注意不能重复引用
@class 只是告诉系统有这个类 但是如果在实现类中用到这个类 需要重新用#import导入该类头文件
18.谈谈你对MVC的理解?为什么要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其他的OC设计模式或别的设计模式吗?
mvc - model view controller 避免了view与model 的强耦合 使代码更灵活 更容易维护 可复用 可扩展 oc其他设计模式有Notification 。target;action. singleton delegate
19.如监测系统键盘的弹出
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector( ) name:UIKeyboardWillShowNotification object:nil];
扩展:ios 弹出键盘挡住UITextView的解决方式
20.举出5个以上你所熟悉的ios sdk库有哪些和第三方库有哪些?
AFWorking/WebKit/SQLite/Core Data/Address Book
21.如何将产品进行多语言发布?
http://fengmm521.blog.163.com/blog/static/25091358201291645852889/
22.如何将敏感字变成**
search = @"某某某";
replace = @“***”;
range = [mstr rangeOfString:search];
[mstr replaceCharactersInRange:range withString:replace];
NSLog(@"%@",mstr);
23.objc中的减号与加号代表什么?
类方法
24.单例目的是什么,并写出一个?
避免重复创建 节省内存空间
static Model * model;
+(id)singleton{
if(!model){
@synchronized(self){
model = [[Model alloc]init];
}}
return model;
}
25.说说响应链
http://www.tuicool.com/articles/6jmUje
从手指触摸屏幕的地方的最上层控件是第一响应者 事件会沿着响应链一直向下传递直到被接受并作出处理
iOS 面试题整理(带答案)二的更多相关文章
- iOS面试题整理带答案
iOS面试题整理带答案 找工作,面试是避免不了的! 而技术开发面试,问一些技术相关的问题是必须的,最新的技术可能人人都趋之若鹜,但有些原理和基础的也希望都有了解. 这里整理了一些iOS相关 ...
- Python面试题集合带答案
目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...
- Java基础语法面试题50题整理(带答案)
嗯,之前某些原因整理了这份面试题,加油生活 (: 0,嗯,先做简单的,那个不对() 1,int [] sy = {0,9,2,3}; 2,int [] sy1 = new int[4]; 3,in ...
- .NET 面试题汇总(带答案)
1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方式可以保证无论何 ...
- 53道java多线程面试题整理及答案(2018年)
最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案. 为此我业余时间整理了Java多线程相关的53道常见面试题,及详细答案,你可以用它来好好准备面试.望各路大牛,发现不 ...
- iOS面试题整理(一)
代码规范 这是一个重点考察项,曾经在微博上发过一个风格纠错题: 也曾在面试时让人当场改过,槽点不少,能够有 10 处以上修改的就基本达到标准了(处女座的人在这方面表现都很优秀 一个区分度很大的面试题 ...
- HTTP协议经典面试题整理及答案详解
无论你是Java.PHP开发者,还是运维人员,只要从事互联网行业,面试时都可能被问到HTTP协议相关知识.历时多天的呕心沥血,为你总结了HTTP协议的经典面试题.由于涉及内容比较繁杂不方便记忆,建议收 ...
- ios面试题整理
(1).weak 和assign的区别? assign: 用于非指针变量 (2).IOS开发之----#import.#include和@class的区别? 1. 如果不是c/c++,尽量用#impo ...
- java多线程面试题整理及答案(2018年)
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对 运算密集型任务提速.比如,如果一个线程完 ...
随机推荐
- Linux服务器安装svn
云安装 yum install subversion 配置 1.配置仓库 [root@localhost /]# cd /home [root@localhost home]# mkdir svn [ ...
- fitnesse页面增加认证
一.增加用户认证1. 只增加一个认证用户:java -jar fitnesse.jar -a username:password 2. 增加多个认证用户(明文密码) 2.1 新建一个passwo ...
- dos 批处理中%cd% 和%~dp0%的区别
看网上介绍区别,写的好复杂,其实很简单: %cd% 在批处理和命令窗口都能使用.用于打印,当前工作路径. %~dp0% 则只能用于批处理中,用于获得当前批处理文件所在的路径. 做个试验试一下: @e ...
- 线程与COM
场景: C++部分封装为COM,C#来调用.调用可能是在线程中的. 应用程序退出时,C#的部分 自动清理,某些线程可能还没有完全停掉. COM内部的东西也在释放内存. 这个时候,稍有不慎,就会崩溃. ...
- 使用jstl+el表达式遇到的几个问题
1.使用jstl访问Map<Integer,String>中的内容时总取不到? el表达式的一个bug,在解析数字的时候,会自动将数字转换成Long类型. 我的解决办法是,Map的key改 ...
- 简单了解一下什么是Django或者说Django是做什么的?
Django是什么? Django是一个基于Python的Web应用框架.它与Python的另外一个Web 框架 Flask最大的区别是,它奉行 “包含一切” 的哲学.该理念即为:创建 Web 应用所 ...
- Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题
Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误: /lib64/libc.so.6: version `GLIBC_2.14' not fou ...
- vim在系统剪切板的复制与粘贴
https://blog.csdn.net/zhangxiao93/article/details/53677764
- 虚拟机安装linux系统无法上网的解决方法
原文:https://www.jb51.net/article/118267.htm 周末闲来无事,用虚拟机安装了centos6.5系统,安装成功后发现不能连接网络,然后我就一脸蒙蔽了,无奈之下,只能 ...
- 安装centos6.5
我是在虚拟机上面安装的centos6.5,本机的系统是windows 2008 datacenter. 到这个地方下载镜像文件:http://mirrors.sohu.com/centos/6.5/i ...