近期面试小结

Tecent:
聊项目。
视图的生命周期:
init-初始化程序

viewDidLoad-加载视图

viewWillAppear-UIViewController对象的视图即将加入窗口时调用;

viewDidApper-UIViewController对象的视图已经加入到窗口时调用;

viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;

viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;

viewWillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;

viewDidUnload-当内存过低,释放一些不需要的视图时调用。

视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。比如,当某个标签有很多UIViewController对象,那么对于任何一个UIViewController对象的视图,只有相应的标签被选中时才会被创建出来。
详解:http://www.cnblogs.com/mddblog/p/4556988.html

应用程序的运行状态:

每个iPhone应用程序都有一个UIApplication,UIApplication是iPhone应用程序的开始并且负责初始化并显 示 UIWindow,并负责加载应用程序的第一个UIView到UIWindow窗体中。UIApplication的另一个任务是帮助管理应用程序的生命周期,而UIApplication通过一个名字为UIApplicationDelegate的代理类来履行这个任务。尽管 UIApplication 会负责接收事件,而UIApplicationDelegate则决定应用程序如何去响应这些事 件,UIApplicationDelegate可以处理 的事件包括应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警告)。处理系统事件需要编写一个继承自UIApplicationDelegate接口的类,而 UIApplicationDelegate接 口提供生命周期函数来处理应用程序以及应用程序的系统事件,这些生命周期函数如下表所示:

1、- (void)applicationWillResignActive:(UIApplication *)application{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
//从主动到非活动状态的应用程序时发送。这可导致产生某些类型的临时中断(如传入电话呼叫或SMS消息) ,或者当用户退出应用程序,它开始过渡到的背景状态
使用此方法暂停正在进行的任务,禁用定时器,踩下油门, OpenGL ES的帧速率。游戏应该使用这种方法来暂停游戏。

2、- (void)applicationDidBecomeActive:(UIApplication *)application {
//说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反

3、- (void)applicationDidEnterBackground:(UIApplication *)application{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
//说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可 / /使用这个方法来释放共享资源,保存用户数据,废止定时器,并存储足够的应用程序状态信息的情况下被终止后,将应用程序恢复到目前的状态。
//如果你的应用程序支持后台运行,这种方法被调用,而不是applicationWillTerminate :当用户退出。

4、- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
//说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。

5、- (void)applicationWillTerminate:(UIApplication *)application{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
//不支持多任务的时候调用
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值(自动设置)。 通过该方法,可以在控制权交回SpringBoard之前,处理任何状态终结。可以使用该方法保存默认设置,更新数据和关闭文件,

6、(void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
//说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
//苹果公司系统工程师建议,应用程序所占内存不应超过20M。开发人员圈内流传一个粗略的经验法则,当应用程序占用了大约20M内存的时候,iphone开始发出内存警告。当应用程序所占内存大于30M时,iphone OS会关闭应用程序。可能实际情况下,会随着硬件越来越强大而这些值会增大。

7、- (void)applicationDidFinishLaunching:(UIApplication*)application {
//说明:当程序载入后执行,该方法是应用程序对象实例化后,程序中首先被触发的部分。启动时,可以在该方法中创建基本窗口,设置它的内容,并让他成为应用程序的关键响应者。
}

网络:TCP三次握手,四次挥手。HTTP的方法。
算法:判断两个矩形是否相交
判断链表是否有环
电梯调度算法
leetcode63

360:
iOS autoLayout:

UIView* number5View = [[UIView alloc] initWithFrame:CGRectMake(x, y, w, h)];
[parentView addSubview:number5View];

这种方式为“显式坐标定位方式”。
当视图数量很多的情况下,由于每个视图都需要明确给出4个属性,因此构建每一个视图非常繁琐而又容易出错。而且,当发生界面变化(例如横竖屏旋转)时,你需要重新计算每个视图的新的布局属性值。这显然不是一个令人满意的解决方法。

于是苹果给出了一个更好的解决方法,就是在创建视图的同时给出其相对于父视图的“对齐方式与缩放系数”,即autoresizingMask。当父视图发生变化时,通过每个子视图的autoresizingMask即可自动得出新的位置,而无需开发者提供。例如上图中的等号键,即可以指定其对齐方式为右对齐、下对齐,指定其缩放系数为固定宽度、固定高度。这样就保证了等号键总位于其父视图的右下角且宽高不变。

苹果解决问题的角度是正确的,通过给出界面变化的规则来自动计算出布局属性的值,
autoresizingMask的问题在于:
其描述界面变化规则不够灵活,很多变化规则根本无法精确描述。autoresizingMask缩放比例是UIKit内部计算的,开发者无法指定缩放比例的精确值。
变化规则只能基于父视图与子视图之间,无法建立同级视图或者跨级视图之间的关系。

自动布局的原理与使用方法:
自动布局是对autoresizingMask的进一步改进,它允许开发者在界面上的任意两个视图之间建立精确的线性变化规则。所谓线性变化就是数学中的一次函数,即:

y = m*x + c

其中x和y是界面中任意两个视图的某个布局属性,m为比例系数,c为常量。例如,如果我们想描述数字键5紧贴在数字键8下方,我们可以建立如下规则:

数字键5的水平中心x坐标 = 1.0 * 数字键8的水平中心x坐标 + 0.0 //8和5水平中心对齐
数字键5的顶部y坐标 = 1.0 * 数字键8的底部y坐标 + 0.0 //8的底部为5的顶部
数字键5的宽度w = 1.0 * 数字键8的宽度w + 0.0 //8和5宽度相等
数字键5的高度h = 1.0 * 数字键8的高度h + 0.0 //8和5高度相等
每个线性变化规则称之为布局约束(Layout Constraint)。由于每个视图需要确定4个布局属性才能准确定位,因此一般来说都需要建立4个布局约束。
http://blog.csdn.net/pucker/article/details/41843511

第三方框架Masonry实现自动布局:http://www.cocoachina.com/ios/20141219/10702.html

扩展:frame 和 bounds的区别
http://blog.csdn.net/mad1989/article/details/8711697

ARC引起内存泄露原因:http://www.bkjia.com/article/24832.html

iOS copy:http://www.cocoachina.com/ios/20150512/11805.html

一定要会编写block和delegate
block循环引用:http://www.cocoachina.com/ios/20160831/17438.html
http://blog.csdn.net/a244573118/article/details/51429927

算法:双向链表实现反转。思路一:就是按单链表反转一样,时间复杂度为o(n).
思路二:利用宏跟双链表的特性:

#define NEXT pre
#define PRE  next

CALayer层动画:http://blog.csdn.net/maylorchao/article/details/42652161

死锁的四个条件:
互斥
不可剥夺
循环等待
请求保持

死锁的预防跟避免:http://c.biancheng.net/cpp/html/2606.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值