面试题

iOS面试题-基础篇

2019-11-20  本文已影响0人  Peter杰

category 和 extension 的区别

define 和 const常量有什么区别?

static关键字的作用

+(void)load; +(void)initialize;有什么用处?

Objective-C使用什么机制管理对象内存?

  1. MRC 手动引用计数
  2. ARC 自动引用计数,现在通常ARC
  3. 通过 retainCount 的机制来决定对象是否需要释放。 每次 runloop 的时候,都会检查对象的 retainCount,如果retainCount 为 0,说明该对象没有地方需要继续使用了,可以释放掉了

ARC下还会存在内存泄露吗?

  1. 循环引用会导致内存泄露
  2. Objective-C对象与CoreFoundation对象进行桥接的时候如果管理不当也会造成内存泄露
  3. CoreFoundation中的对象不受ARC管理,需要开发者手动释放

ARC通过什么方式帮助开发者管理内存?

ARC是为了解决什么问题诞生的?

ARC下还会存在内存泄露吗?

什么情况使用weak关键字,相比assign有什么不同?

@property 的本质是什么?

ivar、getter、setter是如何生成并添加到这个类中的?

  // 该属性的“偏移量” (offset),这个偏移量是“硬编码” (hardcode),表示该变量距离存放对象的内存区域的起始地址有多远
  OBJC_IVAR_$类名$属性名称

  // 方法对应的实现函数
  setter与getter

  // 成员变量列表
  ivar_list

  // 方法列表
  method_list

  // 属性列表
  prop_list

@protocol 和 category 中如何使用 @property

objc_setAssociatedObject
objc_getAssociatedObject

@property后面可以有哪些修饰符?

@property (nonatomic, getter=isOn) BOOL on;

// setter=<name>这种不常用,也**不推荐**使用。故不在这里给出写法

使用atomic一定是线程安全的吗?

@synthesize 和 @dynamic分别有什么作用

ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?

用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?

复制详解
[不可变对象 copy] // 浅复制
[不可变对象 mutableCopy] //深复制
[可变对象 copy] //深复制
[可变对象 mutableCopy] //深复制
[不可变对象 copy] // 浅复制
[不可变对象 mutableCopy] //单层深复制
[可变对象 copy] //单层深复制
[可变对象 mutableCopy] //单层深复制
copy mutableCopy
\color{RED}{NSString} NSString
浅拷贝
NSMutableString
深拷贝
\color{RED}{NSMutableString} NSString
深拷贝
NSMutableString
深拷贝
\color{RED}{NSArray} NSArray
浅拷贝
NSMutableArray
深拷贝
\color{RED}{NSMutableArray} NSArray
深拷贝
NSMutableArray
深拷贝
\color{RED}{NSDictionary} NSDictionary
浅拷贝
NSMutableDictionary
深拷贝
\color{RED}{NSMutableDictionary} NSDictionary
深拷贝
NSMutableDictionary
深拷贝

KVO内部实现原理?

如何手动触发KVO?

手动调用willChangeValueForKey:和didChangeValueForKey:

@property (nonatomic, strong) NSDate *now;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // “手动触发self.now的KVO”,必写。
    [self willChangeValueForKey:@"now"];

    // “手动触发self.now的KVO”,必写。
    [self didChangeValueForKey:@"now"];
}

直接修改成员变量会触发KVO么?

KVC的赋值和取值过程是怎样的?原理是什么?

上一篇 下一篇

猜你喜欢

热点阅读