学习OC

1.数组越界,字典取空问题解决

实现一个数组或者字典的分类方法,判断数组或者字典是否为空或者越界,如果是返回对象,通过runtime交换数组或者字典系统方法。

Runtime的method_exchangeImplementations() 交换的是方法的IMP(函数指针),而非覆盖或删除原方法。原始函数始终存在于内存中,仅是通过SEL查找IMP的路径被修改

2.setNeedsDisplay、setNeedsLayout、layoutIfNeed区别

setNeedsDisplay会调用drawRect方法重画页面

setNeedsLayout会调用layoutSubviews,页面才会发生变化。调用layoutIfNeed不会触发

3.封装组件

通过RSA和RES加密,然后加入私有库,通过pod引用,解密使用

4.AES、RSA

目前最广泛的是使用AES+RSA组合加密的方式。即采用对称加密与非对称加密相结合的方式

客户端用AES加密传输数据(RSA消耗大,影响用户体验),然后通过RSA加密AES的秘钥,传给后台,后台也是通过同样方式传输数据给客户端

5.循环引用

当两个不同的对象各有一个强引用指向对方,那么循环引用便产生了,当然多一个对象产生的环也是一样的。

1、父类与子类 

      父类调用子类,并且子类调用父类,会造成循环引用

2、Block 

      Block 对象ARC中用Strong修饰,MRC中用copy修饰

      Block 本身被Self强引用,并且在Blcok中 强引用了Self ,会造成循环引用,解决方法是使用  weakSelf 代替Self

3、Nstimer

    计时器保留其目标对象,反复执行任务导致的循环

6.Blcok

  Block有栈block,堆block,全局block三种

  栈block存在栈中是自动销毁,堆block存在堆中,需要手动销毁,全局block存在全局区,相当于单利

  block使用copy修饰,是因为block默认是栈block,如果不用copy,函数引用结束后,会自动销毁,再次引用block会空指针异常,使用copy后

为什么 __strong 不会直接造成循环引用

如果只是在block内部对weakSelf进行强引用(例如使用__strong),这本身不会立即引起循环引用。因为strongSelf是block内部的局部变量,它不会强引用block,也不会阻止block被销毁。所以__strong在block内部只是为了确保你可以安全地访问self,避免访问nil。

  会成为堆block,可以再次调用。

7.[ [ NSObject alloc ] init ]

alloc负责分配内存,init负责初始化

8. self调用本身方法,super调用父类方法

super class 和self calss是一样的 获取的都是当前子类,只是super class会找父类的方法而已,但是打印是一样的

9.main函数之后,会创建UIApplication,设置Appdelgte代理,Appdelgte里面会有一个uiwindow,UIwindow里面会有Controller控制器

10. nil:判断空对象 null :判断空指针 nsull:判断空集合

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面试题 1. Cocoa框架是指Foundation框架和Application kit框架;Cocoa Tou...
    鄭经仁阅读 3,477评论 0 0
  • 1.函数和队列的区别?同步函数和异步函数的区别?串行队列和并行队列的区别?什么是栅栏函数 且有什么注意点? 栅栏方...
    鄭经仁阅读 3,332评论 0 0
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 9,789评论 0 11
  • 本文转自(https://www.jianshu.com/p/2e1b3f54b4f3)、(https://www...
    th先生阅读 8,897评论 0 20
  • 以下笔记是边看视频课程边记录下来的,供以后自己查阅复习使用 Runtime学习笔记1 消息转发 在OC中,调用方法...
    mah93阅读 3,244评论 0 0