一、Xcode快捷键
- shift + comand + n 新建xcode项目
- option + command + n 新建分组
- command + n 新建文件
- control + comand + 上/下 .m/.h文件切换
- control + comand + 左/右 上一个和下一个文件之间的切换
- command + ~ 窗口之间切换
- ontrol + command + j 查看定义
- option + command + 左/右 折叠/展开代码块
- command + r 编译运行项目
- command + b 编译不运行
- command + . 停止
二、xib和stroryboard的区别
1、相同点:
- 都用Interface Builder工具来编辑
- 都使用xml来存储,用于描述软件界面
2、不同点:
- Storyboard描述软件界面,相对于xib比较重量级,一个stroryboard可以有多个场景,可以描述整个软件的所有界面
- xib一般用来描述一个界面中的某一个部分
- 查看xib和storyboard的xml代码,区别仅仅是xib少了Scenes和viewController
三、instancetype和id的区别
- instancetype在类型表示上与id一样,都是表示任何对象的类型
- instancetype只能用在返回类型上,不能跟id一样用在参数类型上,id是万能类型
- instancetype比id多一个好处,编译器会检测instancetype的真实类型
四、自定义View
1、注意:
- 要调整View的尺寸大小,要再属性栏的Size设置为Freeform
- 要把显示电池状态的图标去掉,把属性栏的Status Bar设置为None
- 拖进View的子控件的尺寸尽量在尺寸栏上设置,以免出现界面自动调整大小
2、编辑View的类
- 把所有关于View的操作都封装,降低耦合程度
- 读取XIB文件
//新建子View
+(instancetype)buildView{
NSBundle *bundle = [NSBundle mainBundle];
SSView *view = [[bundle loadNibNamed:@"SSView" owner:nil options:nil] lastObject];
return view;
}
- 在重写关于取子控件的值的Getter方法时不要忘记先赋值
//重写setter方法,初始化子控件
-(void)setData:(SSData *)data{
//不要漏掉,漏掉后在点击事件时调用就取不到数据
_data = data;
//添加应用图片
self.imageView.image = [UIImage imageNamed:data.photo];
//添加应用名称
self.nameLabel.text = data.name;
}
- 取消与用户交互
//下载时取消和用户的交互
self.superview.userInteractionEnabled = NO;
//下载完成后禁用
sender.enabled = NO;
五、补充
- 类名命名:公司名+类名
- IBOutlet类型的属性命名:有意义的单词+控件名
- 方法名命名规则:第一个单词首字母小写,后面的每个单词的首字母大写
- 同时重写get和set方法时,要自己定义成员变量,系统不自动生成
- NSBundle表示APP应用的包
- 获取APP的路径函数:NSHomeDirectory();
- 不能把XIB上的子控件直接拖到@implementation...@end上生成连线代码
- 在写两个相同功能的构造方法时,一般用类方法调用对象方法