OC 基础 2019-08-14

2019-08-14  本文已影响0人  金樽明月

学习路线图


image.png
  1. ARC 只是 OC 编译器的一个特性,编译器自动在合适的地方加上了release或autorelease ,不是 运行时的垃圾回收机制。
  2. ARC 的特点:
    1)不允许调用release,retain,retainCount
    2)允许重写dealloc,但是不允许调用[super dealloc]
    3)@property的参数:
    strong:相当于原来的retain(适用于OC对象类型),成员变量是强指针
    weak:相当于原来的assign,(适用于oc对象类型),成员变量是弱指针
    assign:适用于非OC对象类型(基础类型)
  3. 分类 Category
    作用:在不改变原来类的基础上,为类扩充一些方法。(类似 js 中直接在原型上添加方法,但是 js 不推荐,不容易管理)
    注意事项:
    1. 只能添加方法,不能添加属性
    2. 分类的调用顺序:调用最后一个参与编译的分类
  4. 分类和类扩展的区别:
    1、类别中只能增加方法;
    2、是的,你没看错,类扩展不仅可以增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是私有类型的(作用范围只能在自身类,而不是子类或其他地方);
    3、类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的。这是因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中。
    4、类扩展不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。
    5、定义在 .m 文件中的类扩展方法为私有的,定义在 .h 文件(头文件)中的类扩展方法为公有 的。类扩展是在 .m 文件中声明私有方法的非常好的方式。
  5. block
    oc 特有的一种数据类型。被 block 访问的外部变量需要用 __block 修饰
  6. Protocol
    1. @required 和 @optional
    2. id和instancetype的区别
      1)instancetype只能作为函数或者方法的返回值
      2)id能作为方法或者参数的数据类型、返回值,也能用来定义变量。
      3)instancetype对比id的好处:
      能精确的限制返回值的具体类型。
  7. Fundation 框架
    1. NSString、NSMutableString、NSURL、NSRange、NSNumber、NSValue、NSDate
    2. NSArray
      1> 只能存放任意OC对象, 并且是有顺序的。
      2> 不能存储非OC对象,比如int\float\double\char\enum\struct等。
      3> 它是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素.
      4> makeObjectsPerformSelector
      5> enumerateObjectsUsingBlock
    3. NSDictionary
  8. NSFileManager
  9. iOS 沙盒机制
  10. Copy 概念:
    1. 需要遵守对应的协议,比如: NSCopying。也有 mutableCopy
    2. 只有源对象和副本对象都不可变时,才是浅复制,其它都是深复制
    3. @property 的内存管理策略
      1> copy : 只用于NSString\block
      2> strong : 除NSString\block以外的OC对象
      3> weak : 当2个对象相互引用,一端用strong,一端用weak
      4> assgin : 基本数据类型、枚举、结构体(非OC对象)
  11. OC 中的单例模式
    ``Tools.h

import <Foundation/Foundation.h>

@interface Tools : NSObject<NSCopying>
@property (nonatomic,assign) int num;
@property (nonatomic,copy) NSString *text;

Tools.m

import "Tools.h"

static Tools *instance = nil;
@implementation Tools

-(id)retain
{
return self;
}

-(NSUInteger)retainCount
{
return NSUIntegerMax;
}

-(oneway void)release
{
}

-(id)autorelease
{
return self;
}
@end``

上一篇 下一篇

猜你喜欢

热点阅读