1.手动编译链接的方法:cc -c xx.m cc main.o - framework Foundation
2.实际上BOOL类型的变量:是1个有符号的char变量.
3.面向过程与面向对象:
面向过程:在遇到1个需求的时候,实现这个需求的每1个步骤都是自己写代码亲自的去一步步的实现.这样的解决问题的方式我们就叫做面向过程的方式.
面向对象:在遇到1个需求的时候,不要亲自去实现而是找1个专门做这件事情的人来帮助我们搞定.这样的解决问题的方式就叫做面向对象的解决方式.
类:类是对一群具有相同特征或者行为的事物的1个统称.抽象的.不能直接使用.
5.内存中的五大区域.
栈 存储局部变量.
堆 程序员手动申请的字节空间 malloc calloc realloc函数.
BSS段存储未被初始化的全局变量静态变量.
数据段(常量区)存储已被初始化的全局静态变量常量数据.
代码段存储代码.存储程序的代码.
6.类加载:在程序运行期间当某个类第1次被访问到的时候.会将这个类存储到内存中的代码段区域.这个过程叫做类加载.
7.分组导航标记: #pragma mark分组名 #pragma mark - #pragma mark -分组名
1.NSString最常用的类方法和对象方法
+ (instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;
+ (instancetype)stringWithFormat:(NSString *)format
length方法
- (unichar)characterAtIndex:(NSUInteger)index;得到字符串中指定下标的字符.
- (BOOL)isEqualToString:(NSString *)aString;判断相等的方式.
- (NSComparisonResult)compare:(NSString *)string;比较字符串的大小.
1.OC中的static关键字.
a. static不能修饰属性也不能修饰方法.
b. static可以修饰方法中的局部变量.
2.Super只能访问方法,不能访问属性。
3.里氏替换原则 --- LSP
子类可以替换父类的位置.并且程序的功能不受影响.
4. 多态 : 指的是同 1 个行为 , 对于不同的事物具有完全不同的表现形式 .1.取到存储方法的SEL对象,SEL s1 = @selector(方法名);
1).先拿到存储sayHi方法的SEL对象,也就是拿到存储sayHi方法的SEL数据. SEL消息.
2).将这个SEL消息发送给p1对象.
3).这个时候,p1对象接收到这个SEL消息以后就知道要调用方法
4).根据对象的isa指针找到存储类的类对象.
5).找到这个类对象以后在这个类对象中去搜寻是否有和传入的SEL数据相匹配的.
如果有就执行 如果没有再找父类直到NSObject
3.动态类型检测判断
1).判断对象中是否有这个方法可以执行.
- (BOOL)respondsToSelector:(SEL)aSelector;最常用的是这个方法.
2).判断类中是否有指定的类方法.
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
3).判断指定的对象是否为 指定类的对象或者子类对象.
- (BOOL)isKindOfClass:(Class)aClass;
BOOL b1 = [s1 isKindOfClass:[Person class]]; 判断s1对象是否为Person对象或者Person的子类对象.
4). 判断对象是否为指定类的对象 不包括子类.
- (BOOL)isMemberOfClass:(Class)aClass;
[s1 isMemberOfClass:[Student class]];
判断s1对象是否为1个Student对象.不包括Student的子类对象.
5).判断类是否为另外1个类的子类.
+ (BOOL)isSubclassOfClass:(Class)aClass;
- (instancetype)init
{
if(self = [super init])
{
//初始化当前类的属性的代码;
}
retrun self;
}
1. 内存管理的原则
1). 有对象的创建,就要匹配1个release
2). retain的次数和release的次数要匹配.
3).谁用谁retain. 谁不用谁release. 谁负责retain谁就负责relase
4).只有在多1个用户用的时候才retain少1个用户使用的时候才release
2.野指针
C语言中的野指针:定义1个指针变量.没有初始化.这个指针变量的值是1个垃圾值,指向1块随机的空间.这个指针就叫做野指针.
OC中的野指针:指针指向的对象已经被回收了.这样的指针就叫做野指针.
3.在MRC的开发模式下.1个类的属性如果是1个OC对象类型的.那么这个属性的setter方法就应该按照下面的格式写.
- (void)setCar:(Car *)car
{
if(_car != car)
{
[_car release];
_car = [car retain];
}
}
还要重写dealloc方法.
- (void)dealloc
{
[_car release];
[super delloc];
}
atomic nonatomic retain assign strong weak readonly readwrite setter getter
6. 使用命令使ARC MRC兼容 使用命令 . -fno-objc-arc1).将臃肿的类分为多个模块方便管理.
2).扩展1个类.
分类中可以写@property但是只会生成getter setter的声明. 延展中写@property会自动生成私有属性也会生成getter setter的声明和实现.
如果类的成员只希望在类的内部访问,那么就将其定义在延展中.
如果类的成员允许被外界访问定义在本类的@interface中.
int (^myBlock3)(int num1,int num2);
8. block的实现int num3= num1 + num2;
return num3;
};
9. 协议protocol
作用:
1).专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明).
2).只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法声明.而不用自己去定义.
10. @required 与 @optional 修饰协议方法是否必须实现11. 什么是代理模式.
传入的对象,代替当前类完成了某个功能,称为代理模式.
12. 利用协议实现代理模式的主要思路.
1).定义1个协议.里面声明代理类需要实现的方法列表.比如这里的1个代理类需要实现wash cook方法.
2).创建1个代理类(比如猪猪)遵守上面的代理协议并实现方法
3).在需要代理的类中,定义1个对象属性类型为id且遵守代理协议的属性.
4).在代理的类中,调用代理对象的方法.
1. - (BOOL)writeToFile 字符串写入文件
2. + (instancetype)stringWithContentsOfFile 从文件读取字符串
3. 把路径包含到URL中 NSURL *url = [NSURL URLWithString:@"xxxxxx"];
+ (instancetype)stringWithContentsOfURL: 通过URL读取文件中的数据
4. - (BOOL)writeToURL: 写入到URL指向的文件
1.NSRange range = [NSRange NSMakeRange(3,7)]; 创造一个range结构体变量并初始化
2.NSStringFromRange(range) 将一个结构体变成字符串输出
3.CGPointMake CGRectMake CGSizeMake
1.单例模式 NSFileManage *mng = [NSFileManager defaultManager];
2.打开文件时 先判断是否存在 fileExistsAtPath: isDirectory:
再判断是否有权限去读写 isWritableFileAtPath isReadableFileAtPath isDeletableFileAtPath
最后再去操作访问文件
3.获取信息的方法
拿到文件的属性信息 attributesOfItemAtPath
拿到所有子孙文件目录 subpathsAtPath
拿到所有一级子目录 contentsOfDirectory
4.创建文件 creatFileAtPath
5.在指定目录创建文件夹 creatDirectoryAtPath
6.copy文件 copyItemAtPath: toPath:
7.移动文件 moveItemAtPath: toPath:
8.删除文件 removeItemAtPath: 直接删除,不进废纸篓
1.copy调用了copyWithZone 方法 此方法定义在NSCoping协议中。可以自己重写这个方法来自定义copy,要注意继承NSCoping
2.alloc方法内部调用了allocWithZone方法 可以通过重写allocWithZone来达到创建单例模式对象的目的,但要求提供类方法名,类方法名必须以shared或者default开头