写了一下午代码本来想去透透气突然来了一个电话,是码市的什么优质开发者调查员,我都忘了什么时候申请过的!人家问了我一些问题,每个都似曾相识,却又说不完整!记得两年多前面试的时候可是背的滚瓜烂熟的,UI界面画久了还真都忘得差不多了。回来整理了一下刚才的问题,就当在复习下,因为以后换工作可能一会用得到。还有一个关于继承的忘了问的什么了。

weak和assgin的区别

当一个对象的引用计数为0时,所有指向该对象的weak属性指针会被自动设置为nil,而assign属性不会,如果对象被释放了,此时再进行访问,程序崩溃。

@property属性关键字详解

xib/sb为什么用weak

总结下应该是xib/sb只需要强引用它们所必须持有的第一个对象就行,比如viewcontroller。第一个对象下面的用weak,这样viewcontroller释放后所有的子view也会释放。不用担心内存泄漏。

UIView属性用weak还是strong?

Storyboard 使用 Weak Property 声明 Outlet

runloop的用到了那些model

这篇写的比较全我就不废话了
Runloop

Extension(扩展)和Categories(分类)的区别

  • 类别:在没有原类 .m 文件的基础上,给该类添加方法;
  • 延展:一种特殊形式的类别,主要在一个类的.m文件里声明和实现延展的作用,就是给某类添加私有方法或是私有变量。
  • 两个的区别:
    ① 延展可以添加属性并且它的方法都是波裇实现的。延展可以认为是一个私有的类目。
    ② 类别可以在不知道,不改变原有代码的情况下往里面添加新的方法,只能添加,不能删除修改。
    ③ 并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
    ④ 继承可以增加,修改删除方法,添加属性。
  • Category只能为对象添加方法,却不能添加成员变量。原因:如果可以添加成员变量,添加的成员变量没有办法初始化

@property中有哪些属性关键字默认的有哪些

  • 原子性(atomic,nonatomic)
  • 读写(readwrite, readonly)
  • 内存管理(assign, strong, weak, unsafe_unretained,copy)
  • getter、setter
  • 默认的有atomic,readwrite,assign,

OC中调用nil对象的方法

  • nil和C语言的NULL相同,在objc/objc.h中定义。nil表示Objective-C对象的值为空。
    在C语言中,指针的控制用NULL表示。在Objective-C中,nil对象调用任何方法表示什莫
    也不执行,也不会崩溃。
  • 向nil发送消息是完全有效的– 只是在运行时不会有任何作用。
  • 如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil)
  • 如果方法返回值为指针类型,其指针大小为小于或者等 sizeof(void*),float,double,long double
    或者long long 的整型标量,发送给nil的消息将返回0.

iOS-OC篇 (1~72)

base64和MD5

MD5是一种不可逆的消息摘要算法。为计算机安全领域广泛使⽤的一种散列函数,
用以提供消息的完整性保护。常用语校验。

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。Base64是一种编码方式。
注意:base64的主要作用不是加密,而是用来避免“字节”中不能转换成可显示字符的数值。
MD5和Base64介绍与应用

最近有面试了两家,继续记录下,好多东西知道用的时候要注意什么,但是直接让回答有时候还真的打答不出来。

block什么时候在堆上,什么时候在栈上

block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。使用retain也可以,但是block的retain行为默认是用copy的行为实现的, 因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。

block和weak有什么区别?

block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。 weak只能在ARC模式下使用,也只能修饰对象,不能修饰基本数据类型。
block对象可以在block中被重新赋值,weak不可以。

相比delegate的逻辑散落,blocks更加的优雅简洁,我对block比较深刻的体会就是它简化了回调的过程,可以让代码明显提高可读、可维护性和封装性。block的本质应该说是匿名函数,这是OC中所没有的,解决了方法不能传递问题。

iOS面试题

多个网络请求全部完成后再执行

多个网络请求并发执行、顺序执行
这个我记得是有这个信号量,面试的哥们说了一句信号量是RAC的东西,一下把我打乱了!GCD中的信号量应该是和RAC的不同。RAC没有过多研究过,有空看看。

viewcontroller生命周期

这个是很基础的,一时紧张竟然没说完整!
iOS - ViewController生命周期

block和delegate分别在什么时候适合使用

在IOS的开发中,代理能够完成的事情,使用block都可以实现,因为它们都是函数的回调,并且block的实现方式是更加简单的,因为它不需要制定协议,也不需要定义让自身成为代理;但是有些时候,如果这个对象对外界提供的接口很多,那么使用代理是更加方便的,因为它可以把要实现的函数写在一起,只要成为它的代理就可以同时实现它的这些方法,如果是使用block,需要每次调用block,显得比较乱。
所以综上,要是接口少,最好用block,要是接口多就用delegate。

怎么去优化一个viewcontroller

这个问题,我前段时间去沪江参加过一个iOS的分享,PPTV的任凯前辈分享了一个代码重构的经验,当时忘了总结了,PPT我还留着,大家有兴趣可以看看。找个一个现场小伙伴的总结。
沪江 iOS 技术沙龙随想

沪江技术沙龙iOS专场

git的常用命令merge和rebase

1
2
3
4
5
git merge <branch> # 将branch分支合并到当前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交
git rebase master <branch> # 将master rebase到branch,相当于: git co <branch> && git rebase master && git co master && git merge <branch>

我大部分时间都是单打独斗,所以git的命令除了push别的都没怎么用过!

set和array的区别,怎么判断set集合里面的对象

区别set无序,array有序。(我擦我当时竟然忘了这个,面试估计完蛋了)
set元素具有唯一性,不可重复。array的元素可以重复。

如果是自定义对象,对象可能有很多属性,可以便利所有的属性来判断是否相同,但是效率肯定低。参考这个iOS中的对象等同性

关于约束的优先级

我以前碰到类似的问题好像都是把约束拖出来用代码解决的,这个还真没有注意过!
在约束的设置里面有一个Priority参数,设置这个数值越大优先级越高,有些类似CSS中z-index属性。

只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance

最近几个iOS版本的特性

开发者需要知道的iOS 8 SDK新特性

开发者所需要知道的 iOS 9 SDK 新特性

开发者所需要知道的 iOS 10 SDK 新特性

iOS 9 适配系列教程
iOS开发–适配iOS 10以及Xcode 8

react native 的核心思想

React-Native的核心思想就是组件化
React Native学习总结