美文网首页
iOS 面试经验

iOS 面试经验

作者: 哎呦_小明_啊 | 来源:发表于2019-10-31 11:15 被阅读0次

    1,视图控制器的生命周期

    答:loadView:加载View;viewDidLoad :view加载完毕;viewWillAppear:view即将显示;viewDidAppear:view已经显示;viewWillDisapper:view即将消失;viewDidDisappear:view已经消失;delloc:viewController被销毁。

    // ARC下不需要写[super dealloc];

    2,UITableView优化方案

    答:http://www.cocoachina.com/ios/20150602/11968.html

    提前计算并缓存好高度;异步绘制;滑动时按需加载;

    正确使用复用标识符;尽量少用透明图层;尽量少用addView给Cell动态添加View;

    3,NSMutableDictionary 的setObject:forKey:与setValue:forKey:的区别

    答:object中值不能为空,而且key可以是任何类型,必须实现NSCoding协议的类的对象。value中值可以是空,而且key只能是NSString类型。

    4,简述NSThread NSOperation GCD的区别?同步和异步的区别?

    答:NSThread是相对轻量级的,需要自己管理线程的生命周期,同步,加锁问题。NSOperation是完全的面相对象的,本身是一个抽象基类。CGD是基于C语言的一套API,更多在于处理多核运算。GCD自己管理线程,我们只需要把添加入队列。

    同步和异步的区别在于会不会阻塞当前线程。

    同步串行:在当前线程,一个一个执行。

    同步并行:在当前线程,一个一个执行。

    异步串行:新开线程,一个一个执行。

    异步并行:新开很多线程,一并执行。

    5,介绍App启动的完全过程,以及影响启动速度的因素?

    答:启动过程

    1,执行mian函数;

    2,执行UIApplicationMain函数,创建UIApplication对象,创建UIApplicationDelegate对象。

    3,读取info.plist文件的配置,建立沙箱,权限检查等。

    4,创建应用程序的  main RunLoop循环。

    5,给代理发送程序启动的代理方法,application:didfinishllaunchoption 。如果info文件里有storyboard,加载,如果没有,则根据代码来创建主window,然后创建根视图控制器。

    6,如何判断Cell是否显示在屏幕上?

    影响因素:1,减少oc类的数目,减少Category的数目。2,定期扫描不再使用的动态库。

    7,简述KVO、KVC,通知,代理,Block的优缺点

    KVO:优点:缺点:1,只能用来对属性作出反应,而不会用来对方法或者动作作出反应。2,注意移除观察者。

    通知:优点:1,实现简单2,一对多的。缺点:1,在编译期不会检查通知是否能够被观察者正确的处理。2,调试时候很难追踪。3,注册后,需注意释放。

    代理:优点:1,运行成本低。只是保存了一个对象指针,直接回调,没有额外消耗。当公共接口较多,用delegate解耦。

    block: 优点:1,写法简练。缺点:1,运行成本高。block出栈需要将使用的数据从栈内存拷贝到堆内存,对象的话就是加计数,使用完block置nil才消除。2,需要防止循环引用。

    8,typedef struct _ABC{

    int a;

    long b;

    char c;

    } ABC;

    sizeof(ABC) = 24.

    知识点:计算结构题的大小。结构体的大小 =最后一个成员的大小 + 最后一个成员的偏移量。

    9,给定一个字符串,实现打印最大数字(0-9为有效数字字符)字符,例如“abc128ef93r”

    10,

    int a = 1;

    void (^block)() = ^(){ NSLog(@"a = %d",a); };

    a++;

    block();

    输出为:a= 1 .注意:在block 中,如果使用了外部参数,那么这些参数都会拷贝一份到block中,无论外部如何变化,block内的不会发生变化。

    11,

    @interface NSObject (Some)

    @property NSInteger type;

    @end

    @implementation NSObject (Some)

    @end

    这样是否能通过编译,运行时会有什么问题?

    答:能。如果使用type属性的话,会崩溃,因为类别不能增加属性。可以在类别里添加get,seter方法.get用objc_getAssociatedObject(self,@"propertypeName";)set方法用objc_setAssociatedObject(self,@"propertypeName",propertypeName,OBJC_ASSOCIATION_COPY_OBJC_ASSOCIATION_COPY);

    12,UIView 与CALayer 区别?

    答:1,UIView可以响应事件,Layer不可以。

    13,NSArray 与NSSet区别?

    答:NSArray是顺序的存放数据,NSSet无序的,底层使用hash实现的,所以查询速度会快一些。

    14,用NSLog函数输出一个浮点类型,结果四舍五入,并保留一位小数,写法:

    答:float x = 3.4;

    NSLog(@"%.1f", roundf(x * 10) / 10);

    15,NSCache 与 NSDictionary区别?

    答:cache主要用来做缓存。的key不需要实现NSCopying协议。cache可以通过countlimit 限制cache的数量。且在内存吃紧的时候会自动释放。

    16,使用NSTimer注意事项????????????????

    答:1,NSTimer 是需要配合NSRunLoop 才可以正常工作的。2,

    17,对于语句NSString * obj =[[NSData alloc]init]; ,编译和运行时是什么类型的对象?

    答:编译时 NSString 运行时NSData.

    18,面向对象语言的特点,分别介绍一下。

    答:封装:把客观的事物封装成抽象的类。继承:可以使用现有的类的属性和方法,并无需编写原来的类的情况下对这个类进行扩展。多态:不同的对象以自己的方式相应相同的方法。

    19,#define F(x,y)  X + Y   , F (1,2) * F(3,4)

    答:21?错!!!你以为(1+2)*(3+4) =3* 7 =21;

    在C语言里面,宏只是简单的文本替换,所以表达式为:

    1 + 2 *3+ 4 =1 +6+ 4 = 11,正确答案为11。

    20,view的frame和bounds的区别是什么?

    答:frame:该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)bounds:该view在自身坐标系统中的位置和大小。(参照点,自己的坐标)

    21,在一个对象释放前,如果他被加到了notifacationcenter 中,不在notificationcenter中remove这个对象可能会出现什么问题?

    答:崩溃。

    22,app在上线过程中在构建完版本之后可以选择的发布方式分别是什么?

    答:Xcode,Application Loader

    23,NSLog(@"%ld %ld %ld %ld ",sizeof (char), sizeof(char[2]) ,sizeof(char *),sizeof((char *)(124)));这句话在32位系统下输出结果是什么?

    答:1,2,8,8 第一个,char字符型1的长度;第二个,XX;第三个,是指针的大小,32位计算为4,64位计算机为8。

    24,NSUserDefaults是什么,可以存储的数据类型?

    答:plist文件。NSNumber、NSString、NSArray、NSDictionary、NSData、NSDate、

    26.OC可以多重继承么,可以实现多个接口?

    答:不可以。可以多个接口

    27,GIF图展示的原理

    答:

    28 ,哈希表

    答:散列表(hash table)是根据关键码值而直接进行访问的数据结构。字典的底层是一个哈希表。

    29 ,cell上控件的点击事件和cell选中事件的冲突

    答:gestureRecognizer

    if([NSStringFromClass([touch.viewclass]) isEqualToString:@"UITableViewCellContentView"]) {//返回为NO则屏蔽手势事件returnNO; }

    30 ,MVC模式,MVVM模式。

    答:

    31,语音推送。

    答:

    32 ,缓存机制

    答:

    相关文章

      网友评论

          本文标题:iOS 面试经验

          本文链接:https://www.haomeiwen.com/subject/qqgzvctx.html