自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 Mac下安装java运行环境

Mac下默认是没有安装java运行环境的运行java -version命令,查看有没有装java环境,如果显示如下图。那么就说明没有安装进入java sdk这个网址 ,下载java sdk,如下面的红框所示下载完成之后,配置环境变量编辑profile文件: sudo vim /etc/profile,在文件的最后添加下面代码JAVA_HOME="/Library/Ja...

2018-10-20 12:18:23 5158

原创 cocoapods常用命令干货

1. 更新本地仓库pod repo update:更新本地仓库 git pull cd ~/.cocoapods/repos/master Ls -a:是显示该文件夹下的隐藏文件,会发现有一个.git文件说明该文件夹是一个git仓库,可以使用git的方法更新该文件夹的内容 git pull 删除本地库重新下载(网速太慢的情况下不建议) sudo rm -fr ~/.c...

2018-09-27 06:47:00 2224

原创 xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Deve

在运行脚本的时候遇到一个问题,报错"xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance"在网上查找资料,最后根据http://blog.c...

2018-03-20 17:50:43 19779 1

原创 iOS开发中的frame和bounds

ios开发中有两个属性可以设置控件的坐标frame和bounds frame 以父视图的坐标系为参考系 定义了一个相对于父视图的容器 bounds 以自身的坐标系为参考系 是控件的真实显示效果 既生瑜何生亮,也就是说平常我们开发中用到的都是frame,那么为什么还要有bounds呢,下面我们就看下frame和bounds的关系,到底谁说了算?frame大于b

2017-08-25 18:42:22 505

原创 Objective-C之 深拷贝和浅拷贝、copy和mutableCopy(可以验证下)

基础概念深拷贝和浅拷贝:是否会产生新对象 深拷贝:内容拷贝,会产生新的对象浅拷贝:指针拷贝,不会产生新的对象copy和mutableCopy:对于产生的对象的可变性而言(前提是产生了新对象) copy出来的对象不可变mutableCopy出来的对象可变 验证非容器类对象* 对非容器类不可变对象copy测试代码NSString *iStr = @"lixue1";NSString *c

2017-08-25 18:24:23 432

原创 插入类排序:直接插入和希尔排序

直接插入排序思想: 1. 将待排序序列分为有序区和无序区 2. 第一个元素默认作为有序区域,依次遍历后面无序区的元素,将其插入到有序区性能* 时间复杂度:O(n2)* 空间复杂度:O(1)* 稳定性:稳定的代码void insertSort(int a[],int n){ //i从1开始,第一个默认有序 for (int i = 1; i<n; i++) {

2017-08-11 20:36:55 456

原创 排序算法之归并排序

思想: 1. 基于分治法 2. 将待排序序列每次进行两两划分 3. 将划分好的序列进行两两合并,并且在合并的过程中进行排序r性能 1. 时间复杂度: * merge函数中递归是一个完全二叉树:log2n * 里面还有一个合并的while循环n * 时间复杂度 = O(nlogn) 2. 空间

2017-08-11 19:07:16 208

原创 iOS事件响应机制总结

事件分类1. 高级事件:控件的点击事件/手势2. 低级事件:触摸事件响应流程:1. 当发生一个触摸事件的时候,系统会把它打包成UIEvent对象,放到由UIApplication管理的一个事件队列里面2. 等到合适的时机(runloop的运行循环有关),UIApplication会从队头取出一个事件,交给UIWindow对象去处理3. UIWindow会在视图层级结构中找到最合适的视图让其

2017-08-08 13:27:46 344

原创 数据结构栈的操作

#define MAXSIZE 10#include <stdio.h>顺序栈typedef struct stack{ int data[MAXSIZE]; int top;}Stack;Stack* initStack();void push(Stack *s,int x);void pop(Stack *s,int *x);int isEmpty(Stack *

2017-05-30 13:02:41 275

原创 iOS 开发中遇到的问题

1:打印的字典或者数组中的值为 unicode 编码,转为中文 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:searchType.paramasDic options:NSJSONWritingPrettyPrinted error:nil]; NSString *jsonStr = [[NSString al

2017-05-22 17:48:05 427

原创 ios 开发自定义 cell 行高

第一步: 设置一个预估高度: self.tableView.estimatedRowHeight = 100;这样就不会先去走-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath```方法,而是先走下面这个创建 cell(UITableViewCell *)tabl

2017-05-21 22:22:11 361

原创 解决 button 的背景图片被拉伸

防止 button 的背景图片被拉伸UIImage *btnImage = [UIImage imageNamed:@"common_button_red"]; CGFloat btnImageW = btnImage.size.width * 0.5; CGFloat btnImageH = btnImage.size.height * 0.5; UIImage *newB

2017-05-12 21:32:56 2502

原创 iOS10隐藏系统状态栏

解决方案:在 info.plist 文件中添加字段View controller-based status bar appearance:设置为 NO然后设置[UIApplication sharedApplication].statusBarHidden = YES;View controller-based status bar appearance:如果在 plist 文件中设置该字段为 ye

2017-04-27 07:42:35 3486

原创 寻找旋转数组的最小值

所谓旋转数组就是讲数组后面的若干个数放到数组前面。 给定一个递增数组 a[4,5,1,2,3],找出他的最小值第一种思路:从头到尾遍历一遍:时间复杂度 O(n),并没有用到数组递增的特点第二种思路:利用数组的递增特点,因为数组是递增的,当我们把后半部分放到前半部分之后,整个数组相当于被划分成了两个递增的子数组,所以可以采用二分查找的方式,思路如下:有两个指针index1和 index2,其中 in

2017-04-10 15:51:46 256

原创 NSURLSession 总结

NSURLSession:是苹果推出的对于 NSURLConnection的替代者 使用方法: 创建NSURLSessionConfiguration对象 用 configuration 对象配置一个 nsurlsession 用 nsurlsession 创建一个 task 因为在 nsurlsession 中 task 默认是挂起的,可以在 返回一个 task 之后做一些

2017-03-28 11:13:07 330

原创 选择类排序:直接选择与堆排

直接选择排序:整个数组分为有序区和无序区思想 一开始整个数组默认是无序区,有序区元素为空,每趟从无序区里面选出一个最小的元素,与无序区的第一个元素进行交换,整个时候有序区的元素的元素+1,无序区的元素会-1,下一趟排序再从无序区选择一个最小的与无序区的元素进行交换,无序区元素-1.有序区+1,以后执行同样的操作代码如下void selectOrder(int a[],int n ){

2017-03-28 09:48:49 441

原创 交换类排序:冒泡排序(优化)和快排

冒泡排序:交换类排序:两两交换,每趟交换完成后都会有一个最大的被冒到后面代码//两两交换,每趟交换之后都会冒出一个最大的放在后面,void maopao(int a[],int n){ for (int i = 0; i<n;i++) { for (int j = 0; j<n-i-1; j++) { if (a[j]>a[j+1]) {

2017-03-27 21:36:58 761

原创 block 捕获外部变量解析

先看一张全图 在上面的图片中可以看到: block 内部不可以修改自动变量的值,但是加上__block以后就可以 block 内部可以修改对象属性的值,但是不可以修改对象的指向 接下来会逐个分析1. 全局变量 编译前 编译后 可以发现编译后是直接复制的,没有特殊操作 原因:全局变量是存放在全局符号表里面的,在整个 app 生命周期

2017-03-17 19:50:07 831

原创 avplayer 播放崩溃 0__cxa__thread

一开始好着,真机测试也正常,但是模拟器测试进入了播放界面会崩溃,但是通过断点的方式可以运行,最终万能的谷歌赐予了我力量,源于我设置了一个全局断点,如果你的全局断点的 exception 选项是 all,那么你需要设置为 Objective-C.

2017-03-07 07:30:39 818

原创 iOS 开发之 GCD解析(block 如何被添加进 queue 中,以及 block 执行)

GCD 是系统为我们提供的一套 c 语言的 API,可以用来进行多线程编程,下面一次来讲解一下 GCD 的相关 API 首先先来理解 几个概念串行和并发;同步与异步1. 串行和并发 串行:一次只能有一个任务执行 并发:在某一时间间隔内,有两个或者两个以上的任务一起执行(本质还是串行的,只不过按照时间片轮转的方式交替执行)。2. 同步和异步 同步:同步就是任务要等到前面的任务执

2017-02-14 13:16:25 2818 2

原创 iOS开发之block解析

1. block的本质是一个Objective-C的对象,为什么这么说? 在Objective-C中,runtime会在运行时根据对象的isa指针的指向,来度额定这个对象的类型,也可以认为一个对象,它具有isa指针,就是一个OC对象2. 你怎么知道block有isa指针呢,我们可以通过clang命令将来看block的实现//测试代码int main(int

2017-02-13 07:40:58 993

原创 static extern const 静态全局变量与全局变量的区别

static:和extern是用来设置作用域的 const:设置变量只可以被读,不可以被修改static:用static修饰的变量,在其所限定的作用域中只会有一分内存1:在一个函数内部:说明是一个静态局部变量, 不管这个函数被调用多少次,这个static修饰的变量只会有一分内存,也就是说当这个变量多次被修改,都是在上一次基础上修改,不会从头再来2:在一个文件内部,函数外部:静态全局变量

2017-02-08 09:54:54 6573 1

原创 Runloop和AutoreleasePool

autoreleasepool的释放: 一种是在{}之后释放,是对于局部autoreleasepool来说的 还有一种是依赖runloop的,下面主要说的是和runloop相关的应用程序在启动之后,runloop会在主线程注册两个observer,他们用的是同一个回调 1. 第一个observer监听的是即将要进入runloop,会调用autoreleasePush相关的方法,来创建自动释

2017-02-03 21:37:17 494 1

原创 Runloop和线程的关系

runloop与线程是一一对应的,一个runloop对应一个核心的线程,为什么说是核心的,是因为runloop是可以嵌套的,但是核心的只能有一个 对于主线程来说,runloop在程序一启动就默认创建好了。 对于子线程来说,runloop是懒加载的,只有当我们使用的时候才会创建,所以在子线程用定时器要注意:创建子线程的runloop,不然定时器不会回调。

2017-02-03 20:34:28 8270 2

原创 Ovjective-c之@property @synthesize @dynamicy以及修饰符

属性?成员变量?实例变量?@property声明的是属性 写在大括号里面的是成员变量 除了基本数据类型以外的是实例变量@property经常与@synthesize 、@dynamicy搭配使用@synthesize :在Xcode4.5以前,除了定义一个属性之外,还必须在.m文件中加上@synthesize name=_name,编译器会在编译时为我们生成setter和getter方法,Xco

2017-02-02 23:36:29 437 1

原创 ios开发self和super的区别

self和super区别self是关键字代表当前方法的调用者 如果是类方法:代表当前类如果是对象方法:代表当前类的对象super编译器指令[self message]和[super message]的实现其实不管是self还是super真正调用的对象都是一样的,只是查找方法的位置不一样,self是在当前类结构中,super是在父类中查找,但方法真正的接受者都是当前类或者当前类的对象[sel

2017-02-02 17:52:12 4015 1

原创 ios开发之frame,boundes

在ios开发中,我们经常会用到frame,通过设置一个控件的frame来给控件安排位置,对于bounds我们几乎没怎么用过,那么都是CGRect的结构体,但是他们又有什么区别呢,稍安勿躁,请往下看:真理区别frame: 是相对坐标. 是以父控件的坐标系作为参考的. 而且父控件的frame的改变不会影响父控件与子控件之间的布局.bounds: 是绝对坐标. 是以自身的坐标系

2017-02-02 14:12:37 373 1

原创 iOS开发KVO底层实现

kvo(key value observe)用于一个对象监听另外一个对象的属性的改变。kvo实现原理kvo是基于runtime实现的,当一个对象第一次被观察的时候,系统会在运行时动态的为该对象所属的类添加一个派生类,然后将对象的isa指针指向这个派生类,该对象就变成了派生类的对象,在这个派生类中重写基类中所有被观察的属性的setter方法,然后由这个派生类中的setter方法负责通知属性的改变状况。

2017-01-31 16:38:19 416

原创 runtime总结二之消息机制(包括消息转发,消息交换的黑魔法)

runtime的消息机制前面提到过编译器最终会把我们的消息发送转化为函数调用消息发送 [object sendMassage] 首先编译器会在运行时将上面的例子转化为objc_msgSend(obj,@selector(sendMassage))这个函数,转换的时候除了方法本身的参数之外,还有两个隐藏的参数一个是id类型的,代表对象的类型,还是一个是SEL类型的,是函数对应的方法的编号,接下来就

2017-01-28 20:46:42 2308

原创 runtime总结一runtime概述

在runtime系列文章中我会按照以下顺序浅谈自己关于runtime的理解runtime的概述runtime的相关概念runtime消息机制 消息传递动态方法解析消息转发runtime的作用runtime的应用runtime引入oc作为一门动态语言,对象的真正类型以及真正要调用的方法是在运行时才确定的,这就决定了oc需要一套运行时的库来提供支持。runtim就是oc中运行时的库,是

2017-01-27 14:21:00 421

原创 #include #import @class的区别

在iOS开发中,当我们要导入一个文件时,可以通过include或者importimport与include include会产生重复导入的问题,import解决了文件重复导入的问题,include要解决重复导入的问题需要加入#ifndef #define #endifimport与@class @class相对于import结局的是循环导入的问题,他只是一个生命的作用,仅仅告诉编译器这是一个

2017-01-26 21:50:30 215

原创 iOS开发私有变量和私有方法

oc中有私有变量,没有私有犯法,但是严格来说没有绝对的私有变量和私有方法私有变量: oc中提供了关键字@private来声明私有变量,只允许本类访问私有方法: oc中没有提供关键字来声明私有方法,可以通过catogry的匿名类Extension通过在一个只在类的.m文件中来声明一个只能被本类访问的方法。但要注意的一点,OC是一门动态性的语言,他的对象类型和真正要调用的方法是在运行时才确定

2017-01-26 21:22:11 4580

原创 iOS通知 NSNotificationCenter

iOS的通知就像是一种广播机制,观察者:当有一个对象(观察者)要观察某个事件的发生时,首先 观察者会先去通知中心注册notification。发送者:还有一些对象会向通知中心注册一些notifications,这些对象称之为发送者通知中心:建立起发送者和观察者之间联系的桥梁,通知中心会根据消息转发表将发送者发送的事件转发给感兴趣的观察者比如有一天我丢了一个东西,我去失物招领中心登记了一下,有

2017-01-25 11:00:57 228

原创 keychain

keyChain是苹果提供的一种安全性高的容器,可以用来存储一些私密的信息,比如用户名密码等,苹果用它来存储wifi密码等信息,keyChain会把用户信息存储在本地,而不是像NSUserDefault一样存储在app的沙盒里面,对于沙盒中存储的数据,app被卸载之后就会丢失,但是keyChain存储就不会有这种问题,除非你手动清除,本质是一个SQLite数据库,可以通过设置不同的标识来存储不同的用

2017-01-23 21:53:36 257

原创 判断tableView滑到顶部和底部

滑到顶部用代理方法-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView即可以判断滑到底部监听tableView的时刻滑动,也就是在-(void)scrollViewDidScroll:(UIScrollView *)scrollView中实现,当tableView的纵坐标的偏移量+tableView的高度等于tableView的内容高度

2016-12-09 10:34:23 6869

原创 tableView在穿透导航栏以后让section悬浮在导航栏下面

上一篇我提到了让背景图片穿透导航栏,对于tableView来说,他的section会随着tableview的滑动一起滑动,直到当section将要越出在tableView的contentInsets的top时(也就是tableView的内容距离顶部的距离,默认是0,但是如果设置了tableHeaderView,系统会帮我们自动调整为64,这里就会有一个问题,在导航栏透明以及tableView没有滑动

2016-12-09 10:21:51 3837

原创 UINavigationController 背景图片穿透导航栏以及一级界面系统自带右滑手势卡死

第一种方式:在AppDelegate.m添加下面两行代码,即可实现让背景图片穿透导航栏,而且不带下划线。 [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] s

2016-12-08 23:26:54 859

原创 AVPlayer 真机测试没有声音

问题:AVPlayer实现的音乐播放器,模拟器和给真机插上耳机的情况下有声音,但是拔了耳机就没有声音 解决方案 :加上下面这几行代码就可以//可播放可录音,更可以后台播放,还可以在其他程序播放的情况下暂停播放AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudio

2016-12-08 13:13:55 7080

原创 iOS开发之 pch文件的使用,以及相对路径和绝对路径的设置

什么是pch文件?pch是一个以.pch作为后缀的一个预编译文件,主要用来存放程序中比较稳定的,不会被经常修改的代码pch文件的发展史在Xcode6之前,创建一个新的项目之后,会自动在Supporting files文件夹下面创建一个“工程名-Prefix.pch”文件,Xcode6之后,可能是因为程序员把大量的宏定义和头文件放在pch中,导致编译时间过长,苹果去掉它,可能是为了加快编译速度,提高用

2016-11-13 16:42:47 14026 1

原创 ios 图片处理-专辑封面头像旋转-裁剪圆形图片

- (void)startAnimation{imageangle = imageangle+0.5;//全局变量,控制图片每次旋转的角度 CGAffineTransform endAngle = CGAffineTransformMakeRotation(imageangle* (M_PI / 180.0f)); [UIView animateWithDuration:0.01 d

2016-11-07 20:07:03 804

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除