1,xib,storyboard创建编译之后,都会被存入程序的资源之中,NSboundle,跟拖入程序的视频,音频,图片一个样;
xib编辑之前是xib,编译之后存入资源了就是nib格式;
2 horizontal spacing 水平间隔
3,更新约束快捷键 com+alt+等号;
查看控件间距离快捷键:选中一个控件后 按住Alt,点击其他控件查看;
调出双视图:com+Alt+回车,撤销双视图:com+回车;
4,xml数据最外层的是数组,数组包着的是一个个的小字典; 可以直接由字典解析出这个数据
5, duration 一首歌的时间,单位为毫秒; ios的时间单位是秒,安卓的时间单位是毫秒
6 转换integer类型的id
if ( [key iuequaltostring:@“id”] ) {
self.ID = value;
}
7, 宏的命名规则,要么全大写 要么开头k后面用驼峰命名法
- pch文件;在iOS-other中新建;以前自动带有,现在需要手动添加;
在工程里面,Build Settings中,搜索,prefix header ,搜到后添加 把创建的pch文件拖入其中;只保留工程名+pch文件名; 不然文件换了位置会无法使用
9,快捷键 : com+ctrl+上下 .h和.m文件相互跳转
10,创建单例的时候 请求一遍网络数据;但是不能在初始化单例的方法里请求; 在init初始化方法里请求; 因为就创建一个单例,所以单例就走一个初始化方法,就只请求一遍网址
11,懒加载 比如
- (NSMutableArray *)allDataArray {
if (!_allDataArray ) {
self.allDataArray = [NSMutableArray array];
}
return _allDataArray;
}
只有写点语法 才会走getter方法; 创建了数据之后,就可以再使用 _属性名 的格式进行使用;
12 同步加载中 把请求过程添加到子线程中
屏幕快照 2015-10-27 下午3.15.48.png
13, 屏幕快照 2015-10-27 下午3.19.28.png
14, block
起别名 typedef void (^BiMing) ();
block声明属性使用copy : 因为block在栈区,我们不能控制, 我们手动可以控制操作的是堆区; block用完之后要销毁,而在栈区不能在用完之后手动销毁, 所以用copy声明属性, copy一份到堆区中,我们就可进行操作了
block写在数据类的声明里面,
屏幕快照 2015-10-27 下午3.37.29.png
在.m中的主线程中添加block
屏幕快照 2015-10-27 下午3.39.06.png
在控制器里调用单例的时候 调用block使用
屏幕快照 2015-10-27 下午3.33.18.png
14 两个页面之间show 有导航控制器的时候是push,没有的时候默认是模态
15,快捷键 com+等号,让控件恰好包裹其中的文字内容
16 播放详情页面,接收前一页传过来的下标,前一页播放的下标是什么,就穿到第二页哪个下标
屏幕快照 2015-10-27 下午4.38.11.png
17 播放音乐控制器是一个单例控制器 需要一个单例方法
- (instancetype) sharesMusicPlayingVC {
如果用storyBoard创建的页面, 单例里面进行初始化控制器的时候,不能用alloc init;
要通过标识符来取得storyboard的页面, 又因为单例是一个类方法, 所以不能用简单的self.storyboard这个方法; 用 UIStoryboard storyboardWithName:@“Main” 这样的方式来取得可视化控制器
屏幕快照 2015-10-27 下午4.51.04.png
18, 控制器生命周期, 创建控制器之后,先走init方法; 在控制器推出之前,不会走任何方法;
- (void) viewWillAppear:(BOOL)animated {
每次视图加载,都会走这个方法; 而在viewDidLoad中,有些方法只会走一次,比如初始化; 而我们有时候会需要每次在视图加载时都需要进行操作变化,就需要把方法写到viewWillAppear中;
}
- 点击正在播放 按钮,
需要保存当前正在播放音乐 的下标,以及保存当前的数据模型
{
}
在viewWillAppear方法中进行判断下标, 保存下标
[ 2 ]
音乐播放器框架