iOS面试生活随记iOS学习开发

iOS开发面试梳理(二)

2019-07-13  本文已影响12人  程序员_秃头怪
一、isMemberOfClass 和 isKindOfClass 联系与区别
二、iOS 开发中数据持久性有哪几种?

数据存储的核心都是写文件。

CoreData的介绍:
CoreData的特征:
Core Data的6成员对象
Core Data的功能

iOS技术交流群:923910776,群内提供数据结构与算法、底层进阶、swift、逆向、底层面试题整合文档等免费资料!

三、怎样使用performSelector传入3个以上参数,其中一个为结构体
- (id)performSelector:(SEL)aSelector; 
- (id)performSelector:(SEL)aSelector withObject:(id)object; 
- (id)performSelector:(SEL)aSelector withObject: (id)object1 withObject:(id)object2;

typedef struct HYBStruct {
int a;
int b;
} *my_struct;

@interface HYBObject : NSObject
@property (nonatomic, assign) my_struct arg3;
@property (nonatomic, copy) NSString *arg1;
@property (nonatomic, copy) NSString *arg2;

@end
@implementation HYBObject
// 在堆上分配的内存,我们要手动释放掉
- (void)dealloc {
    free(self.arg3);
}

@end

my_struct str = (my_struct)(malloc(sizeof(my_struct)));
str->a = 1;
str->b = 2;
HYBObject *obj = [[HYBObject alloc] init];
obj.arg1 = @"arg1";
obj.arg2 = @"arg2";
obj.arg3 = str; 
[self performSelector:@selector(call:) withObject:obj];
 // 在回调时得到正确的数据的
- (void)call:(HYBObject *)obj { 
    NSLog(@"%d %d", obj.arg3->a, obj.arg3->b);
}

四、UITableViewCell上有个UILabel,显示NSTimer实现的秒表时间,手指滚动cell过程中,label是否刷新,为什么?

这是否刷新取决于timer加入到Run Loop中的Mode是什么。Mode主要是用来指定事件在运行循环中的优先级的,分为:

五、对于单元格重用的理解
解决cell重用的问题
UITableViewCell *cell = [tableview dequeueReusableCellWithIdentifier:defineString]
修改为:UITableViewCell *cell = [tableview cellForRowAtIndexPath:indexPath];

这样就解决掉cell重用机制导致的问题。

六、有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成执行?如果需要a、b、c、d顺序执行,该如何实现?
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{ /*任务a */ });
dispatch_group_async(group, queue, ^{ /*任务b */ });
dispatch_group_async(group, queue, ^{ /*任务c */ }); 
dispatch_group_async(group, queue, ^{ /*任务d */ }); 
dispatch_group_notify(group,dispatch_get_main_queue(), ^{ 
// 在a、b、c、d异步执行完成后,会回调这里
});

七、使用block有什么好处?使用NSTimer写出一个使用block显示(在UILabel上)秒表的代码
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                                 repeats:YES 
                                                callback:^() { 
    weakSelf.secondsLabel.text = ...
}
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

八、一个view已经初始化完毕,view上面添加了n个button,除用view的tag之外,还可以采用什么办法来找到自己想要的button来修改button的值

有2种方法解决:

九、线程与进程的区别和联系?
多线程编程
多线程编程是防止主线程堵塞、增加运行效率的最佳方法。
定时器与线程的区别;
队列和多线程的使用原理

在iOS中队列分为以下几种:

dispatch_queue_t q = dispatch_queue_create("...", DISPATCH_QUEUE_SERIAL);

dispatch_queue_t q = dispatch_queue_create("......",DISPATCH_QUEUE_CONCURRENT);

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_queue_t q = dispatch_get_main_queue();

十、TCP和UDP的区别于联系
TCP连接的三次握手
十一、Scoket连接和HTTP连接的区别:
HTTP协议的特点,关于HTTP请求GET和POST的区别

GET和POST的区别:

GET提交、请求的数据会附在URL之后,即把数据放置在HTTP协议头<requestline>中。
 以"?"分割URL和传输数据,多个参数用&连接。如果数据是英文字母或数字,原样发送, 
如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
传输数据的大小:
安全性:
十二、ASIHttpRequest、AFNetWorking之间的区别
十三、XML数据解析方式各有什么不同,JSON解析有哪些框架?
十四、SVN的使用
十五、如何进行网络消息推送

最后,给大家推荐一个iOS技术交流群,不管你在地球哪个方位,不管你参加工作几年都欢迎你的入驻!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

923910776
上一篇 下一篇

猜你喜欢

热点阅读