第一章
1.运行时语言:在编译的时候不能直接编译成机器可读的语言,而是在运行时(runtime)把程序编译成机器可读的语言。OC就是一门动态语言、c++为静态语言
2.尽量减少头文件的引用,这样可以提高编译速度
3.尽量少使用#define
正确
static NSString *const Name = @"CF";
static const CGFloat Height = 1.80;
错误
#define Name @"CF"
#define Height = 1.80
5.返回值不确定时使用instancetype 而不是用id
第五章
33.在一个类中也可以创建不同的类,这样可以免去创建类似的类,而是用一个类,在类的里面再去常见其他的类即可。
***.h文件 ***
#import <Foundation/Foundation.h>
@interface Catagory : NSObject
@property (nonatomic,copy) NSString *ss;
-(void)eat;
@end
@interface CatagoryOne : NSObject
@property (nonatomic,copy) NSString *oneName;
-(void)eat;
@end
@interface CatagoryTwo : NSObject
@property (nonatomic,copy) NSString *twoName;
-(void)eat;
@end
.m文件
#import "Catagory.h"
@implementation Catagory
-(void)eat{
NSLog(@"Catagory eat");
}
@end
@implementation CatagoryOne
-(void)eat{
NSLog(@"CatagoryOne eat");
}
@end
@implementation CatagoryTwo
-(void)eat{
NSLog(@"CatagoryTwo eat");
}
@end
只需要引用一个#import "Catagory.h"里面的CatagoryOne 和 CatagoryTwo 就都可以使用了
注意这样的优点是把有同样逻辑和功能的类放在一起,不需要再去单独的拆分,如果两个类的逻辑并不一样,那么久不要放在一起。
34.在我们获取一个对象的时候,可以先进行一些判断,例如这个对象确认是某个类,或者是否是有值的,之后再去进行一些操作,这样可以提高代码的健壮性,不会以为拿到的类,类型不对崩溃,会因为以为有值,实际是没有值的崩溃问题。
36.一个对象调用new方法的时候,做了两步操作,第一步:创建对象的内存,第二步:调用对象的init方法
38.block代码块里面使用self会出现循环引用无法释放的问题, 应该在block之前改成弱引用
_weak ClassName *weakself = self;
39.OC中所有对象之间的交互都是通过指针来改变的。
40.当一个对象至nil时,如果没有其他对象强引用就会被释放。
第六章
41.在OC中每个对象都隐藏着一个数据结构指针isa指针。在OC中每个对象都保留一个超类指针,通过该指针可以调度自己已有的方法和调度基类。
注:没有写的建议,个人认为是老的,或者是大家都知道,所有没有提及,只写了个人认为要注意的。
小伙伴们如果认为还有其他要注意的,请留言,我会添加上去。