先mark几个关键词吧
@Class 类名 ;
- 性能优化
- 防止循环拷贝
- 使用@Class来告知类代替#import<> ,在.m实现文件中还是使用#import
release autorelease autoreleasepool
MRC manul reference counting
- retain assign
- MRC机制下,A调用B, 要将Bretain ;A不用B了 ,还要将B release一次
ARC automatic reference counting
- strong weak
- A拥有B时 , 用strong修饰B即可;相当于MRC机制下用retain修饰的对象
- assign一般用于保存基本数据类型
category分类
- @interface 类别 (扩展名称)
- //method;
- @end
- ~~~~~~~~~~~~~~~~
- @implementation
- //method
- @end
- 只能扩展方法,不能扩展属性
- 在category中可以访问对应类的.h文件中声明的属性
- 分类中的方法会重写覆盖原有类的方法
- 优先访问原则 : category分类 > 本类 > 父类
匿名分类/类扩展 (class Extension)
- 用于扩充私有属性和私有方法
只在@implementation中声明的属性是私有属性
只在@implementation中实现,却没有声明的方法为私有方法
NSString类
- NSString *str = @“xxxooo”;
- unichar c = 【str charaterAtIndex:1】; 将str中的第1个字符取出来赋值给字符c
- 结构体中 length
- int a = str.length 返回str的长度给a
block块
- block为数据类型
- 先重命名block再使用 : typedef int (^calBlock)(int ,int); calBlock sumBlock = ^(){ }; calBlock就是重新命名后的块名。
- 一般是前面和后面的代码重复了,会使用block作为参数传入函数来使用
- block里的变量若是与外部的变量同名,block会在堆内复制一个同名变量来使用
- 一般出现同名变量的时候可以在外部的变量前面用__block修饰 ; 这样修饰后的变量就是地址传递 。