1,NSInterger 与int的区别。php
会根据系统不一样来指定int的长度html
#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64ios
typedef long NSInteger;git
typedef unsigned long NSUInteger;github
#elseobjective-c
typedef int NSInteger;算法
typedef unsigned int NSUInteger;编程
#endif设计模式
1,线程,有几建立方法,没种建立方法各有什么区别。若是我要几个窜行的线程怎么建立,还有并行的怎么建立。
数组
线程优先级怎么定义。有哪几种优先级。
2,iOS平台有些什么事件。
答:重力加速度事件,摇动事件,指南针事件,touch事件。
3,iOS touch 事件的原理,以及是怎么再view 中传递的。
iOS的事件分发
2014-01-26 我来讲两句 来源:sakulafly的专栏
移动平台上的开发主要关注数据以及数据的处理,事件的处理以及UI。因此事件的分发处理是很重要的一个环节,对于一个平台的优劣来讲也是一项重要的参数。若是事件的分发设计的很差,一些复杂的UI场景就会变得很难写甚至无法写。从小屏没有触摸的功能机开始到如今大屏多点触摸的智能机,对于事件的分发处理基本思路都是同样的——链(设计模式中有个模式就是职责链chain of responsibility),只是断定的复杂程度不一样。
iOS中的事件有3类,触摸事件(单点,多点,手势)、传感器事件(加速度传感器)和远程控制事件,这里我介绍的是第一种事件的分发处理。
上面的这张图来自苹果的官方。描述了Responder的链,同时也是事件处理的顺序。经过这两张图,咱们能够发现:
1. 事件顺着responder chain传递,若是一环不处理,则传递到下一环,若是都没有处理,最后回到UIApplication,再不处理就会抛弃
2. view的下一级是包含它的viewController,若是没有viewController则是它的superView
3. viewController的下一级是它的view的superView
4. view以后是window,最后传给application,这点iOS会比OS X简单(application就一个,window也一个)
总结出来传递规则是这样的:< 喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICA8aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140126/2014012608582353.png" alt="\">
这样事件就会从first responder逐级传递过来,直到被处理或者被抛弃。
因为UI的复杂,这个responder chain是须要根据事件来计算的。好比,我如今在一个view内加入了2个Button,先点击了一个,则first responder确定是这个点击过的button,但我下面能够去点击另外一个button,因此显然,当触摸事件来时,这个chain是须要从新计算更新的,这个计算的顺序是事件分发的顺序,基本上是分发的反过来。
不管是哪一种事件,都是系统自己先得到,是iOS系统来传给UIApplication的,由Application再决定交给谁去处理,因此若是咱们要拦截事件,能够在UIApplication层面或者UIWindow层面去拦截。
UIView是如何断定这个事件是不是本身应该处理的呢?iOS系统检测到一个触摸操做时会打包一个UIEvent对象,并放入Application的队列,Application从队列中取出事件后交给UIWindow来处理,UIWindow会使用hitTest:withEvent:方法来递归的寻找操做初始点所在的view,这个过程成为hit-test view。
hitTest:withEvent:方法的处理流程以下:调用当前view的pointInside:withEvent:方法来断定触摸点是否在当前view内部,若是返回NO,则hitTest:withEvent:返回nil;若是返回YES,则向当前view内的subViews发送hitTest:withEvent:消息,全部subView的遍历顺序是从数组的末尾向前遍历,直到有subView返回非空对象或遍历完成。若是有subView返回非空对象,hitTest方法会返回这个对象,若是每一个subView返回都是nil,则返回本身。
好了,咱们仍是看个例子:
这里ViewA包含ViewB和ViewC,ViewC中继续包含ViewD和ViewE。假设咱们点击了viewE区域,则hit-test View断定过程以下:
1. 触摸在A内部,因此须要检查B和C
2. 触摸不在B内部,在C内部,因此须要检查D和E
3. 触摸不在D内部,但在E内部,因为E已是叶子了,因此断定到此结束
咱们能够运行一段代码来验证,首先从UIView继承一个类myView,重写里面的
1
2
3
4
5
6
7
8
9
10
|
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *retView = nil;
NSLog(@
"hitTest %@ Entry! event=%@"
, self.name, event);
retView = [
super
hitTest:point withEvent:event];
NSLog(@
"hitTest %@ Exit! view = %@"
, self.name, retView);
return
retView;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
BOOL ret = [
super
pointInside:point withEvent:event];
// if ([self.name isEqualToString:@"viewD"]) {
// ret = YES;
// }
if
(ret) {
NSLog(@
"pointInside %@ = YES"
, self.name);
}
else
{
NSLog(@
"pointInside %@ = NO"
, self.name);
}
return
ret;
}
|
4,全局变量,和局部变量再内存占用上有什么区别。
答:http://wenku.baidu.com/link?url=M8NYcU7hpeGOBOX5eAv6PlesQGa_LdXfdB1Nfp5B8vUj1zk6voSW_JGR6GYtecDdBSoItFtasOGTIpTqc6mIeaP4-J9nX7Pz5NEN6bFSN5a
5,局部变量最大能申请多大的内存,为何会最大只能这么大内存。
答:iOS平台 最大 能申请279M 的内存 Iphone4S 平台测试 long *test = malloc(1024*1024*280);
6,二分查找函数的实现。
二分查找又称折半查找,优势是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。所以,折半查找方法适用于不常常变更而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,若是二者相等,则查找成功;不然利用中间位置记录将表分红前、后两个子表,若是中间位置记录的关键字大于查找关键字,则进一步查找前一子表,不然进一步查找后一子表。重复以上过程,直到找到知足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
答:假设其数组长度为n,其算法复杂度为o(log(n))
下面提供一段二分查找实现的伪代码:
BinarySearch(max,min,des)
mid-<(max+min)/2
while(min<=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid >des then
max=mid-1
else
min=mid+1
return max
7,view 中动画属性有哪些。
8,ios 中bound 和view 有什么区别。
答;见后面的一遍博文。
9,局部变量和全局变量有什么区别。
答:http://wenku.baidu.com/link?url=ZMY4_Uisy4wyZKa320dmVBiKBUzmWabAasGqw_UFKTfyKvd6JCQwplTpm3Os4hVUeKlfov9Lcpuj5BeRiAUeG23JCDpeiTrPNqp7rpv1C0i
10,什么是delegate,他与通知有什么区别,怎么才能产生循环引用,为何会产生循环应用。
全部的引用计数系统,都存在循环应用的问题。例以下面的引用关系:
答:
• 对象a建立并引用到了对象b.
• 对象b建立并引用到了对象c.
• 对象c建立并引用到了对象b.
这时候b和c的引用计数分别是2和1。当a再也不使用b,调用release释放对b的全部权,由于c还引用了b,因此b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。今后,b和c永远留在内存中。
这种状况,必须打断循环引用,经过其余规则来维护引用关系。好比,咱们常见的delegate每每是assign方式的属性而不是retain方式 的属性,赋值不会增长引用计数,就是为了防止delegation两端产生没必要要的循环引用。若是一个UITableViewController 对象a经过retain获取了UITableView对象b的全部权,这个UITableView对象b的delegate又是a, 若是这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。本身在设计使用delegate模式时,也要注意这点。
由于循环引用而产生的内存泄露也是Instrument没法发现的,因此要特别当心。
11,当你有一个bug须要处理,然而又有一个商务会议要开怎么处理
12,ios程序有几种状态。
答:前台,后台,伪后台。从后台关闭。
13,ios 程序controller view 显示的流程。
答:
step1:initWithNib viewController 会进行alloc,并init.
step2: loadView 在这里会看它的子类是否有重写这个函数,若是重写了则调用子类的,不然就调用她本身的。注意,这个时 候视图仍是没有没加载进来的哦。
step3:viewDidLoad 这个时候视图已经存在了。能够在这里添加你想要添加的UI控件了。
step4:viewWillAppear 视图将出如今屏幕上了
step5:viewDidAppear 视图已经成功在屏幕上渲染完成了
step6:viewWillDisappear 视图将要消失了
step7:viewDidDisappear 视图从屏幕上消失了
step8:viewDidUnLoad
14,KVO KVC概念
15,runtime 具体怎么用。Runtime编程。
16,通常用到什么开源的动画框架。
17,通常浏览什么样的国外网站。技术网站。
答:
2012-05-19 17:54:47| 分类: iOS开发|举报|字号 订阅
如今愈来愈多的开发者参与到了,或正在加入iOS等移动操做系统平台的应用开发行列中来了,iOS和Android是目前很火的开发领域。在营收方面跟Android相比iOS目前的情况更为可观。iOS相关的培训和教程也愈来愈多。相信国外的英文站对不少英语基础好的朋友颇有吸引力,一定国外的资源更及时而且更前沿。好的iOS资源学习和工具站会为咱们的开发和学习颇有帮助。本文介绍了收集到的5个iOS海外学习资源站推荐给你们。
?5个iOS应用开发者海外学习资源站推荐
1. Snipplr
Snipplr是个不错的代码学习仓库。Snipplr上面有大量的iOS演示代码,有用的框架,组件和完整的开源代码案例。有时当咱们在实现一个功能的时候,在写Object C代码要花很多时间和精力。若是想偷懒,能够到Snipplr上去搜索一下看有没有相似的完整代码。它搜索的结果都是站外的连接,若是运气好的话,只须要把代码复制出来修改自定义一下不是很省时省力么。
2. ShareKit
ShareKit是一种分享组件,它可能很好地整合到你的应用中。根据个人经验我以为建立和配置社交网络的账号和API要比将代码整合到应用中花的时间要长。因此若是你的应用须要分享功能而且是海外用户群ShareKit是很不错的iOS社交分享插件,它可以很容易地被整合到应用中,而且从他那里能够了解到目前社交网络中什么事物最火,如何将他们整合到应用中。
3. InAppsSettingsKit
应用中的设置(配置)功能是全部手机等移动开发者都没法逃避的工做。若是你想从一开始就将这些工做量减到最低的话,你能够尝试了解一下InAppsSettingsKit的内容。
4. GitHub的Objective-C页面
GitHub在海外有上百万的用户用它来进行代码分享和协做。尽管Objective C在GitHub上只占到2%左右的内容,可是它的Objective C页面仍然是iOS开发者的丰富代码宝藏库。在这里你能够找到知名的和利用普遍的函数库和Framework等。
5. CocoaDev
CocoaDev也是一个很是优秀的关于iOS开发技能的资源学习网站。它提供了很是丰富和完整的iOS开发信息和iOS开发。
18,NSArray 和NSset遍历哪一个速度更快,为何?
答: NSSet到底什么类型,其实它和NSArray功能性质同样,用于存储对象,属于集合; NSSet , NSMutableSet类声明编程接口对象,无序的集合,在内存中存储方式是不连续的,不像NSArray,NSDictionary(都是有序的集合)类声明编程接口对象是有序集合,在内存中存储位置是连续的;
NSSet和咱们经常使用NSArry区别是:在搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash(散列,也可直译为哈希);开发文档中这样解释:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.
好比你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置;一样,当你要访问A时,一个hash过程就能找到A存储的位置。而对于NSArray,若想知道A到底在不在数组中,则须要便利整个数组,显然效率较低了;
NSSet,NSArray都是类,只能添加cocoa对象,若是须要加入基本数据类型(int,float,BOOL,double等),须要将数据封装成NSNumber类型。