IOS面试题--004

1、        简述你对UIView、UIWindow和CALayer的理解

UIView: 界面的元素

UIWindow:应用程序的窗口,通常跟屏幕一样大.呈现程序的全部内容

CALayer:media层.UIView用来定义大小等.CALayer负责显示渲染.

通常uiview都封装一个CALayer.layer更底层.功能更多

 

2、        写一个完整的代理,包括声明,实现

   .h

#import<UIKit/UIKit.h>

@protocolWuPinDelegate<NSObject>

-(void)WuPinChaoJiMeiPin;

-(void)ZhenDeMa;

@end

@interfaceViewController : UIViewController

@property(nonatomic,assign)id<WuPinDelegate>delegate;

 

@end

 

.m

-(void)viewDidLoad

{

    [super viewDidLoad];

    UIButton *button = [UIButtonbuttonWithType:UIButtonTypeContactAdd];

    [self.view addSubview:button];

    [button addTarget:self action:@selector(nimei)forControlEvents:UIControlEventTouchUpInside];

}

 - (void)nimei

{

    [self.delegate WuPinChaoJiMeiPin];

    [self.delegate ZhenDeMa];

}

 

3、        分析json、xml的区别?json、xml解析方式的底层是如何处理的?

XML是标准通用标记语言 (SGML)的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

JSON(JavaScriptObject Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立 于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl,Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。

 

(1).关于轻量级和重量级
轻量级和重量级是相对来说的,那么XML相对于JSON的重量级体现在哪呢?应该体现在解析上,XML目前设计了两种解析方式:DOM和 SAX。
<1>.DOM
DOM 是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑父节点和子节 点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;
<2>.SAX
SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。
所以,JSON和XML的轻/重量级的区别在于:
JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;见到大括号或放括号入栈,底层以栈的方式解析.
XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。

 

 

 

4、        ViewController的 didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?

  当程序收到内存警告时候ViewController会调用didReceiveMemoryWarning这个方法。

调用了这个方法之后,对view进行释放并且调用viewDidUnload方法

从iOS3.0开始,不需要重载这个函数,把释放内存的代码放到viewDidUnload中去。

5、        面向对象的三大特征,并作简单的介绍

继承 : 子类可以直接重用父类的成员;

封装: 隐藏内部实现,稳定外部接口;

多态:不同对象对同一个消息不同响应;

 

6、        重写一个NSStrng类型的,retain方式声明name属性的setter和getter方法

  - (void)setName:(NSString *)name

{

    _name = @"meipin";

 

}

 

-(NSString *)name

{

    return _name;

}

属性不允许同时重写getter和setter方法

7、        简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?

 

通知中心:发布通知,注册观察者,移除观察者.通常是一对多的.

键值编码:不使用属性,就可以对变量进行赋值

键值观察者:监听属性的变化.一旦发现属性值发生变化.触发事件,

代理:代理模式.由代理帮委托者完成一些事情.

 

 

8、        What is lazyloading?

懒加载,又称为延迟加载。通常用法,你有一个UITextField类型的property,简单定义为userNameTextField,但是你不在初始化方法里为其alloc/init,它就只是一个指针,不会占用内存。在访问器里判断此property的指针是否为空,若为空,就alloc/init,这时才真正生成这个对象除非这个对象被使用,否则它永远不会真正生成,也就不会占用内存。

 

9、        什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?

协议;同第二题

 

 

10、     分别描述类别(categories)和延展(extensions)是什么?以及两者的区别?继承和类别在实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?

 

类目是对于现有的一个类的扩展.

延展是定义私有变量

 

继承是子类对于父类已经拥有的成员的继承,创建了新的类.

类目还是原有的类,只是对于原有的类进行了一定的功能扩充.

 

类目为什么不能添加实例变量:因为类的方法中使用的都是静态变量,不能使用实例变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值