面试问题总结

1、copy,weak,assign,strong,retain 都有什么区别,应用在什么地方

        assign :一般应用于基础类型,oc的基本数据类型NSInteger、CGFloat。C的数据类型int、float、            double、  char、等还用于委托设计模式,防止循环引用,不会更改计数器

        retain:保留计数,获得到了对象的所有权,引用计数在原有基础上+1

        copy:建立一个索引计数为1的对象,然后释放旧对象 。用来复制对象,一般字符串用copy,Foundation中不可变对象使用copy效果相当于retain,只是引用计数+1.

        strong:(强引用)告诉编译器自动帮我们插入retain,

        weak:(弱引用)是普通赋值相当于手动管理内存的assign。

        assign和retain的区别:assign就是直接赋值,从而可能引起1中的问题,当数据为int, float等原生类型时,可以使用assign。retain就如2中所述,使用了引用计数,retain引起引用计数加1, release引起引用计数减1,当引用计数为0时,dealloc函数被调用,内存被回收。

        copy和retain:copy是创建一个新对象,copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存,retain是创建一个指针,引用对象计数加1。Copy属性表示两个对象内容相同,新的对象retain count为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝。这里指的是NSString,NSNumber等等一类的对象。

        weak 和strong的区别:不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

        retain和strong的区别:在处理用strong声明的Block属性引发的问题时偶然发现的。在诸多教程中都会讲到:声明属性时用strong或者retain效果是一样的(貌似更多开发者更倾向于用strong)。不过在声明Block时,使用strong和retain会有截然不同的效果。strong会等于copy,而retain竟然等于assign!当然定义Block还是应该用copy,因为非ARC下不copy的Block会在栈中,ARC中的Block都会在堆上的。

        assign和weak的区别:weak只可以修饰对象,assign既可以修饰对象也可以修饰基本数据类型,如int、double和NSIntegerdeng 。weak不会产生野指针问题,assign可能导致野指针问题,导致程序崩溃。

        block和weak区别:__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。block对象可以在block中被重新赋值,weak不可以。

2、深拷贝和浅拷贝

        浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址

        深拷贝是真正的复制了一份,复制的对象指向了新的地址

3、响应事件是怎么传递的

        1.触摸屏幕产生触摸事件后,触摸事件会被添加到由UIApplication管理的事件队列中(即,首先接收到事件的是UIApplication)。

        2.UIApplication会从事件队列中取出最前面的事件,把事件传递给应用程序的主窗口(keyWindow)。

        3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件。(至此,第一步已完成)

        4.最合适的view会调用自己的touches方法处理事件

        5.touches默认做法是把事件顺着响应者链条向上抛。

        事件的传递和响应的区别:事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件。

4、内购流程

    1.判断内购权限

    2.获得产品购买列表

    3.注册内购监听

    4.实现内购监听

    5.发起内购请求

    6.解析内购数据

   校验:

    1.产品标识符: product Identifier

        在itunes store应用内定义的产品ID,例如com.公司名.产品名.道具名(com.xxxx.video.vip)

    2.交易状态: state

        Purchased购买成功

        Restored恢复购买

        Failed失败

        Deferred等待确认,儿童模式需要询问家长同意

    3. Receipt

        很长的一段字符串,大概49行,作为二次验证的重要依据

    4. 交易标识符: transaction Identifier

        我们需要把Receipt发送給苹果的苹果的服务器验证,用户的购买信息是否真实

        验证服务器地址

        在测试服务器中,发送receipt苹果的测试服务器(https://sandbox.itunes.apple.com/verifyReceipt)验证

        在正式服务器中(已上线Appstore),发送receipt到苹果的正式服务器(https://buy.itunes.apple.com/verifyReceipt)验证

5、ios本地存储分为几种?都是什么?具体作用?

       1. 应用沙盒

        Document:适合存储重要的数据, iTunes同步应用时会同步该文件下的内容,(比如游戏中的存档)

        Library/Caches:适合存储体积大,不需要备份的非重要数据,iTunes不会同步该文件

        Library/Preferences:通常保存应用的设置信息, iTunes会同步

        tmp:保存应用的临时文件,用完就删除,系统可能在应用没在运行时删除该目录下的文件,iTunes不会同步

获取沙盒路径Document:NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentFilePath = paths.firstObject;

6、多线程会用那些,都用什么区别

        NSThread 面向对象的,需要程序员手动创建线程,但不需要手动销毁。子线程间通信很难。

        GCD c语言,充分利用了设备的多核,自动管理线程生命周期。比NSOperation效率更高。

        NSOperation 基于gcd封装,更加面向对象,比gcd多了一些功能。两个概念:操作(NSOperation)和队列(NSOperationQueue)

7、block底层原理是什么

        block本质上也是一个OC对象,它内部也有个isa指针

        block是封装了函数调用以及函数调用环境的OC对象

        block是封装函数及其上下文的OC对象

8、数据存储都有什么区别

    沙盒的的根目录有三个文件夹:Documents,Library,tmp

引用 //www.greatytc.com/p/f6871fff04b0

9、堆和栈的区别

        因为:Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,就是release OC对象存放于堆里面(堆内存要程序员手动回收)非OC对象一般放在栈里面(栈内存会被系统自动回收)堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存

按管理方式分

        对于栈来讲,是由系统编译器自动管理,不需要程序员手动管理

        对于堆来讲,释放工作由程序员手动管理,不及时回收容易产生内存泄露

按分配方式分

        堆是动态分配和回收内存的,没有静态分配的堆

        栈有两种分配方式:静态分配和动态分配

        静态分配是系统编译器完成的,比如局部变量的分配

        动态分配是有alloc函数进行分配的,但是栈的动态分配和堆是不同的,它的动态分配也由系统编译器进行释放,不需要程序员手动管理

        栈是吃了吐 堆是吃了拉

10、动画效果都有什么方式,有什么区别

    1、CABasicAnimation基本动画(fromValue和toValue)

    2、CAKeyframeAnimation关键帧动画:

    3、UIView 代码块调用:

引用  //www.greatytc.com/p/9a66dbc232e1

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

推荐阅读更多精彩内容