有道云笔记转移

来源:互联网 发布:java 多字段排序 编辑:程序博客网 时间:2024/04/27 17:37
  1. 音乐播放器练习项目结构
    这里写图片描述

2.

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后面用驼峰命名法

  1. 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 同步加载中 把请求过程添加到子线程中

13,

14, block
起别名 typedef void (^BiMing) ();
block声明属性使用copy : 因为block在栈区,我们不能控制, 我们手动可以控制操作的是堆区; block用完之后要销毁,而在栈区不能在用完之后手动销毁, 所以用copy声明属性, copy一份到堆区中,我们就可进行操作了

block写在数据类的声明里面,

在.m中的主线程中添加block

在控制器里调用单例的时候 调用block使用

14 两个页面之间show 有导航控制器的时候是push,没有的时候默认是模态

15,快捷键 com+等号,让控件恰好包裹其中的文字内容

16 播放详情页面,接收前一页传过来的下标,前一页播放的下标是什么,就穿到第二页哪个下标

17 播放音乐控制器是一个单例控制器 需要一个单例方法

  • (instancetype) sharesMusicPlayingVC {

如果用storyBoard创建的页面, 单例里面进行初始化控制器的时候,不能用alloc init;
要通过标识符来取得storyboard的页面, 又因为单例是一个类方法, 所以不能用简单的self.storyboard这个方法; 用 UIStoryboard storyboardWithName:@“Main” 这样的方式来取得可视化控制器

18, 控制器生命周期, 创建控制器之后,先走init方法; 在控制器推出之前,不会走任何方法;

  • (void) viewWillAppear:(BOOL)animated {
    每次视图加载,都会走这个方法; 而在viewDidLoad中,有些方法只会走一次,比如初始化; 而我们有时候会需要每次在视图加载时都需要进行操作变化,就需要把方法写到viewWillAppear中;

}

  1. 点击正在播放 按钮,
    需要保存当前正在播放音乐 的下标,以及保存当前的数据模型
    {

}
在viewWillAppear方法中进行判断下标, 保存下标
这里写图片描述

3

iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易了。
在iOS6中我们可以在3地方实现状态保持和恢复:
应用程序委托对象
视图控制器
自定义视图
为了演示这个功能实现,我们把基于故事板的HelloWorld工程改造一下,在画面中添加一个文本框
iOS开发那些事–iOS6 UI状态保持和恢复
用户在文本框中输入一些内容,应用程序退出并且终止后再次进来的时候,文本框中还会保持原来输入的内容。然后在IB的Scene中选中View Controller,打开右边的标识检查器,设置Restoration ID(恢复标识)为viewController。
iOS开发那些事–iOS6 UI状态保持和恢复
恢复标识是iOS6为了实现UI状态保持和恢复添加的设置项目。我们还需要在应用程序委托对象AppDelegate代码部分做一些修改,添加的代码如下:
-(BOOL) application:(UIApplication )application shouldSaveApplicationState:(NSCoder )coder
{
return YES;
}

-(BOOL) application:(UIApplication )application shouldRestoreApplicationState:(NSCoder )coder
{
return YES;
}

  • (void)application:(UIApplication )application willEncodeRestorableStateWithCoder:(NSCoder )coder
    {
    [coder encodeFloat:2.0 forKey:@”Version”];
    }

  • (void)application:(UIApplication )application didDecodeRestorableStateWithCoder:(NSCoder )coder
    {
    float lastVer = [coder decodeFloatForKey:@”Version”];
    NSLog(@”lastVer = %f”,lastVer);
    }
    其中application:shouldSaveApplicationState:在应用退出的时候调用,负责控制是否允许保存状态,返回YES情况是可以保存,NO是不保存。
    application:shouldRestoreApplicationState:是应用启动时候调用,负责控制是否恢复上次退出的时候的状态,返回YES情况是可以恢复,NO是不恢复。
    application:willEncodeRestorableStateWithCoder:方法是保存时候调用,在这个方法中实现UI状态或数据的保存,其中[coder encodeFloat:2.0 forKey:@”Version”]是保存简单数据。
    application:didDecodeRestorableStateWithCoder:方法是恢复时候调用,在这个方法中实现UI状态或数据的恢复,其中[coder decodeFloatForKey:@”Version”]语句是恢复上次保存的数据。
    要想实现具体画面中控件的保持和恢复,还需要在它视图控制器中添加一些代码,ViewController.m中添加的代码如下:
    -(void)encodeRestorableStateWithCoder:(NSCoder *)coder
    {
    [super encodeRestorableStateWithCoder:coder];
    [coder encodeObject:self.txtField.text forKey:kSaveKey];
    }

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
[super decodeRestorableStateWithCoder:coder];
self.txtField.text = [coder decodeObjectForKey:kSaveKey];
}
在iOS6之后视图控制器都添加了两个:encodeRestorableStateWithCoder:和 decodeRestorableStateWithCoder:用来实现该控制器中的控件或数据的保存和恢复。其中 encodeRestorableStateWithCoder: 方法是在保存时候调用,[coder encodeObject:self.txtField.text forKey:kSaveKey]语句是按照指定的键保存文本框的内容,decodeRestorableStateWithCoder:方法是在恢复时 候调用,[coder decodeObjectForKey:kSaveKey]是恢复文本框内容时候调用,保存和恢复事实上就是向一个归档文件中编码和解码的过程。

(
Reactive:响应式编程: web编程中,这种方式编程的软件在网页上,平板上等 都能适应页面正常运行;
在ios中概念是 数据的变化 直接改变视图的展示;

4 block本质

1,
普通的局部变量声明后,给block内部使用的话
block内部只会引用它的初始值(block定义的那一刻),block不能跟踪局部变量的改变
block会在定义的那一刻,就直接获得外部局部变量的值,以后都不会变;
这里写图片描述
即 block括号内获得的输出值只会永远是从上面获得的int age = 10; 下面再对age如何赋值毫无影响

2
加上 下划线 __block修饰的block就不一样了,block方法内部会一直引用被__block修饰的变量; 这是让block获取到变量的方法
这里写图片描述
3
用static修饰的变量
block也能一直访问该age变量, 因为用static修饰了,这个局部变量就会变成了静态变量,会一直存在内存中,所以block能一直访问到这个变量,跟踪它的变化; 而不加修饰声明的普通局部变量,声明之后就会死掉., 如果在外边在调用block,就会访问不到这个变量, 所以为了防止这种情况出错,block在用普通的局部变量的时候就会直接把值定死,不会再变化;

这里写图片描述

4

block引用 全局变量,

num声明在block方法外部,是一个全局变量, 会一直存在于内存中, block就也能一直访问到它的变化
这里写图片描述

5 cell自适应高度

计算一段文本在限定宽高内所占矩形的大小

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context;

使用时的注意事项:
1: NSAttributedString 的每个部分都要至少设置两个属性:
NSFontAttributeName
NSForegroundColorAttributeName
2: NSStringDrawingOptions 的值, 在多行的情况下, 至少要有
NSStringDrawingUsesLineFragmentOrigin
NSStringDrawingUsesFontLeading

0 0
原创粉丝点击