基础

作者: 豌豆大师 | 来源:发表于2019-01-27 12:04 被阅读2次

RunLoop

RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来使线程随时处理事件并不退出的逻辑。线程执行了这个函数后,就会一直处于这个函数内部 “接受消息->等待->处理” 的循环中,直到这个循环结束(比如传入 quit 的消息),函数返回

用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行;而且在没有事件处理的时候,会进入睡眠模式,从而节省CPU资源,提高程序性能。

参考https://blog.ibireme.com/2015/05/18/runloop/#more-41710
参考http://v.youku.com/v_show/id_XODgxODkzODI0.html

Runtime

Objective-C是一门面向对象的动态语言。
runtime:一组为Objective-C实现动态语言特性的API(项目中#import <objc/runtime.h>可查看API)。

其有两个核心:

1、类的各个方面的动态配置;
2、消息传递机制(调用任何方法其实都是进行消息发送,先在当前类的方法列表查找方法,找到即执行方法的IMP,如果没有,则顺着当前类的继承体系查找,直到NSObject,如果还没有,则进行消息转发

常见用法:

1、获取对象属性列表
2、类别中添加属性、方法
3、方法交换
4、消息发送、消息转发。(包括@property自动生成setter、getter、ivar变量其实都是通过runtime来实现的)

消息转发分为三步:
1、+ (BOOL)resolveInstanceMethod:(SEL)selector;(可以通过动态添加方法)
2、- (id)forwardingTargetForSelector:(SEL)aSelector;(指定其它对象接收此消息)
3、- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector(方法签名)
- (void)forwardInvocation:(NSInvocation *)anInvocation(返回不识别方法的信息)

锁的实现方式

参考
iOS中锁的实现方式有以下几种:
@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock

综合考虑:不考虑性能使用@synchronized,考虑性能使用dispatch_semaphore

实例方法、类方法、私有方法、私有变量

实例方法通常指“+”方法
类方法通常指“-”方法

实例方法与类方法的区别与联系

1.类方法可以调用类方法。
2.类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
3.类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
4.类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。
5.self在实例方法中代表的是对象的首地址(object self);在类方法中代表的是class(class self)

OC中没有绝对的私有方法和私有变量

因为OC是一门动态语言,在程序运行过程中,我们是可以通过runtime动态的是获取任何私有变量和私有方法,并且可以修改值或方法。所以并没有严格意义上的私有方法和私有变量。

内存管理

管理机制:通过引用计数来进行管理,遵循“谁创建,谁释放;谁引用,谁管理”的原则。
引用计数实现:通过SideTable实现(__weak同样)。具体可参考:链接

常见修饰符

修饰符:

nonatomic (非原子性)
atomic(原子性)
strong(强引用)
copy(拷贝)
assign (修饰基本数据类型)
unsafe_unretained
weak(修饰不需要增加引用计数的对象)
readwrite(可读写)
readonly(只读)
getter、setter(设置自定义生成的getter和setter方法名)

其中atomic、strong、assign、readwirte为默认修饰符

参考

相关文章

  • 机械设备安装技术

    设备基础种类及应用 垫层基础允许产生沉降:大型储罐 浅基础扩展基础联合基础:轧机独立基础 深基础桩基础:适用于需要...

  • 基础,基础,基础

    如果有人现在问我,JAVA该怎么学,我会告诉他不要急于求成,少看视频,多练,多思考。但说到这里有人可能会反...

  • 【Android】知识点汇总,坚持原创ing

    Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础...

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

  • 零基础学画画从入门到放弃

    零基础应该怎么学画画?零基础那就从基础开始学啊!基础是什么?造型基础和色彩基础。 造型基础就是用点线面组成起码能让...

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • 基础基础还是基础

    这次去面试,还是被基础给打趴下了。 对于PHP7的新特性没有了解。 对于TP的新特性没有了解。 再一个就是独立完成...

  • 零基础学UI设计需要美术基础吗?

    零基础学UI设计需要美术基础吗?零基础学UI设计需要美术基础吗?零基础学UI设计需要美术基础吗?零基础学UI设计需...

  • 基础基础!

    人生中第一个自主设计的实验方案终于得到认可^O^在设计方案过程中认识到基础知识以及细心的重要性,还有半个学期可以努...

  • Go语言基础语法--注释、基础结构2

    章节 GO语言基础语法--注释、基础结构(重要) 1.GO语言基础语法---注释、基础结构 基础结构注意事项 源文...

网友评论

      本文标题:基础

      本文链接:https://www.haomeiwen.com/subject/yhpgjqtx.html