标签:# iOS 基础

iOS - Runtime 详解

iOS - Runtime 详解

0. 概述

Objective-C Runtime 使得C具有了面向对象的能力,在程序运行时创建,检查,修改类,对象和它们的方法。Runtime 是 C和汇编写的,这里http://www.opensource.apple.com/source/objc4/可以下载Apple维护的开源代码,GUN也有一个开源的Runtime版本,它们都努力保持一致。Apple官方的runtime编程指南

对于 C 语言,函数的调用会在编译期就已经决定好,在编译完成后直接顺序执行。但是 OC 是一门动态语言,函数调用变成了消息发送,在编译期不能知道调用哪个函数,Runtime 就是去解决如何在运行时期找到调用方法的问题。

iOS - 系统中的锁

多线程同时访问同一块资源会造成资源抢夺,容易引发数据错乱和数据安全问题,此时我们需要保证资源同时只有一个线程访问,加锁就是为了解决这个问题。

常用的加锁方式:(性能由差到好)

  • OSSpinLock 自旋锁,存在优先级反转问题,破坏了 spinLock,后来Apple推出 os_unfair_lock_t 解决优先级翻转问题
  • dispatch_semaphore 信号量
  • pthread_mutex 互斥锁 (C语言)
  • NSLock 对象锁
  • NSCondition 条件锁
  • NSRecursiveLock 递归锁
  • NSConditionLock 条件锁
  • @synchronized 性能最差

iOS - 类与对象

iOS - 类与对象

类方法

OC 中类的方法只有实例方法和静态方法两种:

@interface Controller: NSObject
/// 静态方法
+ (void)thisIsAStaticMethod;

/// 实例方法
- (void)thisIsAnInstanceMethod;
@end

OC 中的方法只要声明在 @interface 里,就可以认为是公有的。实际上,OC 没有像 Java,C++ 中的那种绝对的 私有及保护 的成员方法,仅仅可以对调用者隐藏某些方法。

声明和实现都写在 @implementation 里的方法,类的外部是看不到的。

可以使用 分类(Category) 和 类扩展(Extension)来实现私有方法。