ios 平时自己面试遇到的一些问题

记录一下平时看到过的面试题,后面遇到好的再添加


 属性的实质是什么?属性默认的关键字都有哪些?atomic和nonatomic区别?@dynamic关键字和@synthesize关键字是用来做什么的?

   1 @property = ivar + getter + setter;@property 系统会自动生成setter和getter方法;

   2 readwrite(读写),readonly(只读),assign(不会使引用计数加1),retain(引用计数加1)

      copy,nonatomic(非原子性访问,多线程并发访问会提高性能),atomic(原子访问)

       weak(相当于assign,可以把对应的指针变量置为nil)

 3    atomicnonatomic区别主要是在于系统生成的getter和setter方法不一样,nonatomic的速度要比atomic

     atomic会给线程增加一个安全锁, 但是atomic并不能保证线程安全

4  dynamicsynthesize,前者不自动生成setter和getter由自己实现存取方法,后者编译期间会让编译器自动生成setter/getter方法,当  有自定义的存或取方法时,自定义会屏蔽自动生成该方法

 NSString一般关键字使用copy还是strong?为什么?

   2.1 block使用copy关键字,为什么?

  默认情况下block是存在栈中的,可能被随时回收,通过copy操作可以使其在堆中保留一份, 相当于一直强引用着, 因此如果block中用到self时, 需要将其弱化


三 可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?


四 进程和线程的区别?同步异步的区别?并行和并发的区别?

进程和线程的区别:一个程序至少有一个进程,一个进程至少有一个线程,进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源。线程是处理器调度的基本单位。

并行和并发的区别:并发性:两个和两个以上的事件或活动在同一时间间隔内发生,并行性:是指两个和两个以上事件或活动在同一时刻发生

五 GCD的一些常用的函数

dispatch_async异步执行队列 dispatch_sync 同步执行队列  dispatch_get_main_queue全局串行 dispatch_get_global_queue并发

六 数据持久化(FMDB)

七 说一下AppDelegate的几个方法?从后台到前台调用了哪些方法?第一次启动调用了哪些方法?从前台到后台调用了哪些方法?

八  NSCache优于NSDictionary的几点?

NSCache是一个容器,用于临时存储对象,NSCache中的key不用实现copy,存储的对象也不必实现NSCoding协议,程序退出后就被释放

九 知不知道Designated Initializer?使用它的时候有什么需要注意的问题?

十  如何捕捉导航栏系统返回键的点击事件

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item; // called to push. return NO not to.

十一 是否使用过在一个类里面定义多个类

十二  在cell的.m里面如何获取到cell所在的controller(通过UIResponder)

十三  对appdelegate的rootViewController进行过什么操作(比如替换)

十四 类目(category)与延展,category想添加属性怎么办(用runtime方法绑定属性)

category:用于扩展已存在的类,向一个类添加方法,无法添加实例变量

extension:

十五 使用Masonry导致内存持续增长问题分析

重写updateConstraints会多次执行,每执行一次,内存就会增长一次,根据官方文档说明对于没用或失效的约束应该立即删除,  而 mas_makeConstraints方法就是添加约束,每添加一层,内存增长一次。不删除的话他就一直存在,因此需要约束管理。

Masonry提供了三种设置约束的方法:

- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block 添加约束,不管原来与没有,只是添加

- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block   更新,在原来约束的基础上进行局部更新

3   - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block 重设。删除原来已有的约束

十六  简单说明一下Runloopbuttom的添加点击事件,只写了addtarget没有写具体方法,为什么会崩溃。什么解决


十七  ios重用机制

十八  runtime的用法

    a 绑定属性

    b 动态创建类NSClassFromString

    交换方法和给变量赋值

     d 映射

十九 NStimer在什么情况下会造成线程堵塞,如果NSTimer不准怎么实现一个精准的?

NSTimer加在main runloop中,模式是NSDefaultRunLoopMode,main负责所有主线程事件,例如UI界面的操作,复杂的运算,这样在同一个runloop中timer就会产生阻塞。


二十  ios一个界面多个网络请求如何处理(GCD处理)

二十一 loadView的原理

loadView和viewDidLoad的区别就是,调用loadView时view还没有生成,调用viewDidLoad时,view已经生成了

调用loadview方法,要给控制器指定view.否则在viewdidload方法中调用self.view(view的set或者get方法)都会使程序进入死循环.





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值