iOS面试题

1.nonatomic,readwrite,assign,strong,copy,weak,readonly,retain,release关键字的意思?

nontomic原子性,被修饰的属性编译器不使用同步锁
readwrite:属性拥有setter和getter方法,编译器会自动生成这两个方法
readonly:属性仅拥有getter方法,编译器会自动生成getter方法。
assign:用于修饰"纯量类型"
strong :强引用,表明该属性定义了一种"拥有关系"。
weak:弱引用。
copy:深拷贝,给属性赋值时,设置方法不保存新值,而是将其拷贝一份
retain:计数器+1
release:计数器-1

2.iOS支付的整个流程?

微信支付流程
3.在过往的工作中你遇到了哪些难点,又是如何解决它的?

4.在开发中有使用runtime去做一些事情吗?具体有哪些?

  • 使用Method Swizzling(黑魔法)替换系统的方法:有个需求需要统计一个控制器出现的次数,使用runtime的替换方法改变viewWillAppear系统方法的实现。
  • 使用runtime对属性进行获取与赋值,利用runtime可以自己写一个Json解析的三方库
  • JSPatch利用的也是runtime机制,使js就可以调用OC的原生库。
5.平均每年一家公司,说说为什么离职?

  • 第一家实习的公司,因为工资问题
  • 第二家是外包公司,不想干
  • 第三家是因为公司解散。
6.NSTimer和在UITableView滑动列表时,timer会暂定回调,为什么?如何解决?

原因:
RunLoop只能运行在一种mode下,如果要换mode,当前的loop也需要停下重启成新的。利用这个机制,ScrollView滚动过程中NSDefaultRunLoopMode(kCFRunLoopDefaultMode)的mode会切换到UITrackingRunLoopMode来保证ScrollView的流畅滑动:只能在NSDefaultRunLoopMode模式下处理的事件会影响ScrollView的滑动。

解决:
可以通过将timer添加到NSRunLoopCommonModes(kCFRunLoopCommonModes)来解决。

7.本地存储对象的方式有哪些?

  • 归档解档
  • CoreData
  • Sqlite
  • FMDB
    注意:NSUserDefault和Plist都不能存储对象。
8.FMDB用过,你知道最主要的类有那些吗?

FMDatabase FMDataBaseQueue

9.OC与C语言的区别?

C语言是编译语言 OC是面向对象的动态语言
OC除了编译器外,还有自身特有的Runtime机制,用来动态的创建对象及消息的发送与转发。

10.要先下载多张图片,多张图片下载完成之后将图片合成一张,你如何实现?

使用GCD里面的队列组,将多个任务放到异步队列组中执行,然后在dispatch_group_notify方法里面执行最后的操作。

 // 1.队列组  
    dispatch_group_t group = dispatch_group_create();  
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
      
    // 2.下载图片1  
    __block UIImage *image1 = nil;  //要加一个 __block因为 block代码默认不能改外面的东西(记住语法即可)  
    dispatch_group_async(group, queue, ^{  
        NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg"];  
        NSData *data1 = [NSData dataWithContentsOfURL:url1];  
        image1 = [UIImage imageWithData:data1];  
    });  
      
    // 3.下载图片2  
    __block UIImage *image2 = nil;  
    dispatch_group_async(group, queue, ^{  
        NSURL *url2 = [NSURL URLWithString:@"http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png"];  
        NSData *data2 = [NSData dataWithContentsOfURL:url2];  
        image2 = [UIImage imageWithData:data2];  
    });  
      
    // 4.合并图片 用Quartz2D的知识,则要先要搞一个空的大图片,然后再把小图片画上去(保证执行完组里面的所有任务之后,再执行notify函数里面的block)  
    //队列组:要把队列组里面的所有任务都执行完后调用dispatch_group_notify(group, queue, ^{ }  
    dispatch_group_notify(group, queue, ^{  
        // 开启一个位图上下文  
        UIGraphicsBeginImageContextWithOptions(image1.size, NO, 0.0);  
          
        // 绘制第1张图片  
        CGFloat image1W = image1.size.width;  
        CGFloat image1H = image1.size.height;  
        [image1 drawInRect:CGRectMake(0, 0, image1W, image1H)];  
          
        // 绘制第2张图片  
        CGFloat image2W = image2.size.width * 0.5;  
        CGFloat image2H = image2.size.height * 0.5;  
        CGFloat image2Y = image1H - image2H;  
        [image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)];  
          
        // 得到上下文中的图片  
        UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();  
          
        // 结束上下文  
        UIGraphicsEndImageContext();  
          
        // 5.回到主线程显示图片  
        dispatch_async(dispatch_get_main_queue(), ^{  
            self.imageView.image = fullImage;  
        });  
    }); 
11.你平时会怎么来学习?

  • 官方文档
  • 大牛的博客
  • github
  • 视频教程
12.block与delegate的区别?

block侧重消息的传递的结果
delegate可以监测消息传递的过程

13.做过蓝牙吗?实现的过程是?

蓝牙.png
14.遇到bad_Access是什么原因,你会如何去处理?

bad_Access内存错误调试
遇到BAD_ACCESS怎么办?
访问了野指针的时候,比如一个已经释放的对象执行了release、访问已经释放对象的成员变量或者发消息

15.讲一下购物车实现的过程?

购物车.png
16.nil对象去调用方法会出现问题吗?

不会出现程序崩溃,但不会发送消息,直接返回nil或0
OC中向nil发消息,程序是不会崩溃的。
因为OC的函数都是通过objc_msgSend进行消息发送来实现的,相对于C和C++来说,对于空指针的操作会引起crash问题,而objc_msgSend会通过判断self来决定是否发送消息,如果self为nil,那么selector也会为空,直接返回,不会出现问题。视方法返回值,向nil发消息可能会返回nil(返回值为对象),0(返回值为一些基础数据)或0X0(返回值为id)等。但对于[NSNull null]对象发送消息时,是会crash的,因为NSNull类只有一个null方法。

NSString *str = nil;
[str stringByAppendingString:@"ssssss"];

调用方法的时候,还是会执行objc_msgSend()消息转发的函数,但是当传过来的object为nil的时候,objc_msgSend()会直接返回nil或0,不会执行消息转发。

17.排序算法你知道哪些?链表,栈,队列的区别?树,图这些你知道吗?
18.你有一些未来规划?

未来规划:

  • 首先是过好每一天。
  • 坚持跑步,强健体魄,摆脱体质差对人生的困扰。
  • 坚持每天计划地制定和执行。(重在执行)
  • 然后朝着让自己变得更好的方向发展。
19.远程推送原理
远程推送.png

APNS工作流程.png

文字概括.png
20.NSString *str = nil;与NSString *str = @"";的区别?
  • nil就是把一个对象的指针置为空,只是切断了指针与内存中对象的联系;如果在设置为nil之前没有调用release,那么该段内存是没有释放,这就很容易造成内存泄漏。
  • @""就是开辟了一段内存,但是没有存放任何字符串内容(或者说是存放了空字符串)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容