OC内存管理|青训营笔记

67 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第3天 Objective-c

Foundation框架

#import <Foundation/Foundation.h>

  1. NSObject Class 所有类的根类,包含了大量适应OC语言方法,NSObject是一个遵守NSObject协议的类
  2. [ [ ClassName alloc ] init ] = [ ByteDancer new ]
  3. NSObject-发送消息(方法调用)-[ ObjectName Message ]
  4. 类关系判断:应用于字典对应的不确定类型的判断和转型 

Foundation框架的基本数据类型

  1. NSString字符串 
    1. 创建:c语言字符串 char *cString = “James”
    2. 格式化字符串: NSString *stringObject5 = [ [ NSString alloc[ initWithFormat:@“%d, %@ ” , a, ”str”];
    3. 具体用法有:
      1. 获取长度:length
      2. 获取索引下表的字符 characterAtIndex:0
      3. 截取字符串:substring…
  2. Array数组
    1. 创建 
    2. 可变NSMutableArray特殊方法
      1. (void)addObject:(ObjectType)anObject;
      2. (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
      3. (void)removeLastObject;
      4. (void)removeObjectAtIndex:(NSUInteger)index;
      5. NSMutableArray数据增删 
    3. NSDictionary字典:@key1(随便格式)@value1(随便格式)
      1. 访问与增删 
    4. NSNumber:@(数字)=创建NSNumber对象

iOS&Objective-C的内存管理

iOS内存管理——ARC|强引用计数

我们需要管理什么?-任何继承NSObject对象都需要进行内存管理继承NSObject对象会分配在堆里

栈内存中储存非OC对象,堆内存中存储OC对象

  1. MRC Manual Reference Counting 
    1. alloc new copy mutableCopy 开头的方法创建对象 引用计数=1
    2. retain引用计数+1
    3. release 引用计数-1
    4. 当对象的引用计数=0时,系统会向对象发送dealloc(内存回收)
    5. @autoreleasepool自动内存释放池
  2. ARC Automatic Reference Counting编译器自动加入内存管理代码
    1. 只要有一个强指针在内存中指向对象,对象就不能释放「特别注意循环引用导致内存溢出
    2. ARC销毁时强引用的个数=0;而不是引用的个数=0;
    3. 默认所有的对象变量的指针都是强指针:ClassName *pr = [ClassName new]/[ [ClassName alloc ] init] 而弱指针需要显式声明 __weak
  3. @Property
    1. strong:强持有 keep this in the heap until I don’t point to it anymore; only of OC object
    2. Weak:弱持有|不拥有属性对象 keep this in the heap as long as someone else point s to it strongly; only of OC object
    3. Copy:拥有属性对象的拷贝,和strong的区别:会调用copy方法
    4. Assign:assign指定setter使用简单赋值,用于基本类型,不用于OC对象
    5. 避免循环引用,常见于Delegate