Hexo

只是为了记录自己在这条路上——前进着


  • 首页

  • 归档

  • 标签

iOS中NSUserDefaults详解

发表于 2017-03-24 |

关于NSUserDefaults官方文档
https://developer.apple.com/reference/foundation/userdefaults

一:NSUserDefaults是什么,有什么用处
对于应用来说,每个用户都有自己的独特偏好设置,而好的应用会让用户根据喜好选择合适的使用方式,把这些偏好记录在应用包的plist文件中,通过NSUserDefaults类来访问,这是NSUserDefaults的常用姿势。如果有一些设置你希望用户即使升级后还可以继续使用,比如玩游戏时得过的最高分、喜好和通知设置、主题颜色甚至一个用户头像,那么你可以使用NSUserDefaults来存储这些信息,如果有更多需求,可以了解数据持久化相关的知识。
具体来说NSUserDefaults是iOS系统提供的一个单例类(iOS提供了若干个单例类),通过类方法standardUserDefaults可以获取NSUserDefaults单例。如:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSUserDefaults单例以key-value的形式存储了一系列偏好设置,key是名称,value是相应的数据。存/取数据时可以使用方法objectForKey:和setObject:forKey:来把对象存储到相应的plist文件中,或者读取,既然是plist文件,那么对象的类型则必须是plist文件可以存储的类型,正如官方文档中提到的——

NSData
NSString
NSNumber
NSDate
NSArray
NSDictionary
阅读全文 »

IQKeyboardManager框架详解

发表于 2017-03-23 |

每一个iOS应用的开发者在工作中都会遇到需要用户键盘输入数据的需求,而输入框(UITextField/UITextView)的父界面可能是普通的UIView,也可能是UIScrollView,UITableView,UICollectionView 等。而如果输入框位于屏幕的底部,弹起的键盘很可能覆盖输入框,导致用户就看不到输入结果,体验较差。

那么这篇博客主要就是要介绍IQKeyboardManager框架的详细使用,使用IQKeyboardManager可以很容易地解决弹起键盘遮盖输入框的问题,并且易于集成,不需要侵入性地继承特定的类,也不需要实现某些奇怪的协议,满足大部分需求只需要少于5行代码。更让人惊喜的是IQKeyboardManager已经提供Swift版本。

首先下载第三方库源码导入已有项目中(也可以使用CocoaPods), 然后只需要一行代码就可控制自动键盘处理事件在整个项目内是否启用。

阅读全文 »

如何对UIScrollView进行自动布局(Autolayout)

发表于 2017-03-23 |
说 UIScrollView是个刺儿头,实在没有夸张,这是由于scrollview本身contentSize、contentInsets等复杂的特性 导致,苹果文档在讲autolayout的时候甚至专门拿出一节讲如何对scrollview进行自动布局。

一、竖屏布局

为 了方便布局,对于在逻辑或者结构上比较紧密的多个视图组件,我们往往采取化零为整的办法,将多个view放在一个containerview中,让这个父 view独自去应对外部情况的变化,将内部和外部隔绝开来,本例中,就是将头像和文字label放入一个contanierview中的。这样,我们布局 的主要工作就集中在两个组件之间了:头像所在的containerview和scrollview。同样的,对于scrollview中的子view,我 们同样也可以将其放在同一个父的Container view中,然后将这个container view作为scrollview的子view也即content view,这样我们对scroll view 的布局就可以简化为对content view的布局,而content view里面的子view相对于content view的布局就是普通的布局了,剩下的只需要我们解决好scroll view和content view的布局即可。

阅读全文 »

UITableViewCell自定义左滑删除按钮

发表于 2017-03-18 |
  1. 建立一个可变数组, 可以删除的, 作为测试数据
    @property (nonatomic, strong) NSMutableArray *arrM;

初始化:
_arrM = [[NSMutableArray alloc] initWithObjects:@”1”,@”2”,@”3”,@”4”,@”5”,@”6”,@”7”,@”8”,@”9”,@”10”,@”11”,@”12”, nil];

阅读全文 »

程序启动的完整过程

发表于 2017-03-17 |

程序启动的完整过程:
1、先执行main函数,main内部会调用UIApplicationMain函数,该函数的声明如下:
int UIApplicationMain(int argc, char argv[], NSString principalClassName, NSString *delegateClassName)。
argc、argv:标准main函数的参数,直接传递给UIApplicationMain进行相关处理即可
principalClassName:指定应用程序类,该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
   delegateClassName:指定应用程序类的代理类,该类必须遵守UIApplicationDelegate协议。

阅读全文 »

iOS网易云音乐锁屏界面实现

发表于 2017-03-16 |

完整的实现思路:

App如果需要在锁屏界面上显示相关的信息和按钮, 必须先开启远程控制事件(Remote Control Event), 否则锁屏界面只显示滑动解锁.
实现锁屏界面信息, 将歌曲的相关信息更新到锁屏界面上
实现锁屏界面的事件处理, 在锁屏界面和上拉的快速功能菜单中实现播放控制

远程控制事件的实现

在iOS7.1之前, 远程控制事件主要涉及以下三个方法:

开始接收远程控制事件
结束接收远程控制事件
触发远程控制事件后的捕获处理
官方文档对这三个方法的描述如下, 这里做了简单的翻译.

阅读全文 »

获取手机信息

发表于 2017-03-16 |

iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用户设备、系统信息、应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取到的。那么通过那些api可以获取这些信息呢,iOS的SDK中提供了UIDevice,NSBundle,NSLocale。

1.UIDevice
UIDevice提供了多种属性、类函数及状态通知,帮助我们全方位了解设备状况。从检测电池电量到定位设备与临近感应,UIDevice所做的工作就是为应用程序提供用户及设备的一些信息。UIDevice类还能够收集关于设备的各种具体细节,例如机型及iOS版本等。其中大部分属性都对开发工作具有积极的辅助作用。下面的代码简单的使用UIDevice获取手机属性。

阅读全文 »

关于runtime

发表于 2017-03-16 |

1.什么是runtime?
1> runtime是一套底层的C语言API(包含很多强大实用的C语言数据类型、C语言函数)
2> 实际上,平时我们编写的OC代码,底层都是基于runtime实现的

  • 也就是说,平时我们编写的OC代码,最终都是转成了底层的runtime代码(C语言代码)

2.runtime有啥用?
1> 能动态产生一个类、一个成员变量、一个方法
2> 能动态修改一个类、一个成员变量、一个方法
3> 能动态删除一个类、一个成员变量、一个方法

3.常见的函数、头文件

#import : 成员变量、类、方法
Ivar class_copyIvarList : 获得某个类内部的所有成员变量
Method
class_copyMethodList : 获得某个类内部的所有方法
Method class_getInstanceMethod : 获得某个实例方法(对象方法,减号-开头)
Method class_getClassMethod : 获得某个类方法(加号+开头)
method_exchangeImplementations : 交换2个方法的具体实现

阅读全文 »

GIT详细分析

发表于 2017-03-16 |

1.git与svn的区别
1.1 git的作用 : 源代码管理
1.2 为什么要进行源代码管理

  • 为了方便多人协同开发(多人同时开发时代码整合)
  • 为了方便代码备份(标签和分支)
    1.3 git与svn的区别
  • 代码的管理方式不一样
    版本控制能力 : 提交更新代码
    svn 集中式的代码管理.版本控制的能力在服务器上.一旦服务器挂掉了,多人开发就受阻
    git 分布式的代码管理,客户端自己也有版本控制能力,万一服务器挂掉了,多人开发依然可以进行

  • 工程文件的表现形式不一样
    svn 会在每个文件夹下创建一个.svn隐藏文件(体积相对大些,且冲突相对较多)
    git 只会在根目录下创建一个.git的隐藏文件(体积相对较小,且冲突相对较少)

  • 使用场景不一样
    svn 公司内部用,公司内网中使用,一般不会公布出去
    git 开源项目使用

阅读全文 »
Eden

Eden

iOS大道蚂蚁

9 日志
© 2017 Eden
由 Hexo 强力驱动
主题 - NexT.Muse