1.全局常量正规写法:全局变量不能定义在自己类中,开发中便于管理所有的全局变量,通常搞一个GlobeConst文件,里面专门定义全局变量,统一管理,要不然项目文件多不好找。
2.类方法中调用实例方法
[[[self class] alloc] 实例方法];
3.alert的取消注意点
[_alert dismissViewControllerAnimated:YES completion:^{
_alert = nil;
}];
其实这个代码可以这样写,完成消失视图后,把这个alert赋kong,这个内存优化了一点
[_alert dismissViewControllerAnimated:YES completion:nil];
// 一般我们是这样,但其实这时候的_alert没有赋空,还是占着内存的
1.对于NSLog,有时候我们测试,确实需要打上很多,但是有时候只需要哪里输出就可以,所以就会出现这些不太专业的,所以在测试完建议去掉,留下有信息量的输出
NSLog(@"------")
补充,对于系统的nslog我是比较少用的,我用的是第三方的NSLogger,不懂先github再百度看看是怎么回事,主要优点就是有单独的客户端输出系统,这样大面积的看输出比较爽
2.高封装,比如我有两个数组A和B,然后需要处理这个两个数组变成C数组,一般人的做法就是写个方法,方法里面直接调用A数组和B数组,返回C数组,然后控制器就这样直接调用这个方法了,
我的想法是,要有可复用性,封装性,所以这个方法应该是传两个参数,参数就是A数组和B数组
3.循环语句注释问题
while (i<n && q<m) {
if (q == -1 || T[i] == P[q]) {
i++;
q++;
}else {
q = next[q];
}
}// end while
补充:可以在
if(){ // begin if
}// end if
// 多层嵌套
if() { //begin one if
if() { // begin two if
} // end two if
}// end one if
4.为了防止block的循环引用,我们一般在block里面不会直接用self
,
我们是用
__weak typeof(self) weakSelf = self;
但是每次我们要用这个,就得声明一下,好麻烦,这个变量又没法声明成全局,所以我们的解决方法是声明成宏
在宏文件中写
#define WeakSelf __weak typeof(self) weakSelf = self;
使用
- (void)loadNet {
// __weak __typeof(self) weakSelf = self;
// 加载网络课表数据
[_schoolTimeData loadSchoolTimeTable:^(id _Nullable resultData) {
WeakSelf;
// 加载coll视图
// [weakSelf setUpCollectionView];
[weakSelf setUpCollectionView];
}];
}