
iOS 开发资料
于海明
缺乏自信,就好像拉着手刹在人生道路上行驶
展开
-
内购
======================第一部分协议===============第一步.png第二步.jpg第三步.jpg第四步.png第五步.png第六步.png第七步.jpg第八步.jpg第九步.jpg转载 2017-03-30 15:44:13 · 547 阅读 · 0 评论 -
typedef和#define的用法与区别
一、作用typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令。 1、typedef的作用(1)typedef是C语言语句,其功能是用户为已有数据类型取“别名”。例如:转载 2017-04-05 09:13:01 · 1178 阅读 · 0 评论 -
UIApplicationDelegate与UIViewController生命周期
一、UIApplicationDelegate是什么?每个 iPhone 应用程序都有一个 UIApplication,UIApplication 是 iPhone 应用程序的开始并且负责初始化并显示 UIWindow,并负责加载应用程序的第一个 UIView 到 UIWindow 窗体中。UIApplication 的另一个任务是帮助管理应用程序的生命周期,而 UIApplica转载 2017-04-05 09:12:40 · 669 阅读 · 0 评论 -
UITableView性能优化
一、概述iOS开发中,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻。Android也是如此,Android中的ListView和UITableView是相同功能的一个控件,但是iOS的UITableView更为强大一点,原因就不说了,如果你学过Android就知道iOS中的UITableView使用起来是非常简单的,这也是峰哥喜欢iOS胜过Android的转载 2017-04-05 09:12:18 · 285 阅读 · 0 评论 -
UIWebView与WKWebView
一、概述UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。WKWebView只能用代码创建,而且自身就支持了右滑返回手势allowsBackForwardNavigationGestures和加载进度estimatedProgress等一些UIWebView不具备却非常好用的属性。通过简单的测试即可发现UIWe转载 2017-04-05 09:11:48 · 691 阅读 · 0 评论 -
XCTest单元测试
一、概述在Xcode中新建项目的时候会默认勾选单元测试,勾选后每个XCode新建的iOS的项目中都有一个叫做”项目名Tests”的分组,这个分组里就是XCTestCase的子类,XCTest中的测试类都是继承自XCTestCase。当我们为项目增加了新的功能时,可以使用单元测试针对该模块进行测试。 二、单元测试的使用1、常规测试首先新建一个名为“MyDemo转载 2017-04-05 09:11:11 · 872 阅读 · 0 评论 -
多线程
——————————NSThread————————- (void)viewDidLoad { [superviewDidLoad]; //不要把耗时操作,比如网络请求,线程睡眠代码,加载文件,大量运算放到主线程 //不要把修改页面的代码放在子线程,不会得到及时更新 //开辟一个子线程用来处理某些事转载 2017-04-05 09:10:04 · 1422 阅读 · 0 评论 -
网络
/****************************HTTP协议和HTTPS协议********/- (void)viewDidLoad { [super viewDidLoad]; /* 一、HTTP协议 1、概述 HTTP(超文本传输协议)是一个属于转载 2017-04-05 09:09:29 · 680 阅读 · 0 评论 -
KVO
一、概述KVO是基于观察者设计模式来实现的。观察者模式:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的。观察者模式较完美地将目标对象与观察者对象解耦。KVO:Key-Value Observing,是Foundation框架提供的一种机制,使用KVO,可以方便地对指定对象的某个属转载 2017-04-03 15:54:03 · 371 阅读 · 0 评论 -
Socket
1、Socket(套接字)概念网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一段称为一个socket,socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。Socket是对TCP/IP协转载 2017-04-05 09:13:18 · 445 阅读 · 0 评论 -
Runtime
一、概述如何给NSArray添加一个属性(不能使用继承)?不能用继承,难道用分类?但是分类只能添加方法不能添加属性啊(Category不允许为已有的类添加新的成员变量,实际上允许添加属性的,同样可以使用@property,但是不会生成_变量(带下划线的成员变量),也不会生成添加属性的getter和setter方法,所以,尽管添加了属性,也无法使用点语法调用getter和setter方法。但转载 2017-04-05 09:13:40 · 613 阅读 · 0 评论 -
iOS 系统震动和系统提示声
//提示音 //AudioServicesPlaySystemSound(1007); //这个是最猛的振动 //AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); //3D Touch 中 Peek 震动反馈 //AudioServicesPla...转载 2018-11-16 11:01:37 · 1920 阅读 · 0 评论 -
地图
//苹果系统自带地图是高德苹果在中国的地图服务商是高德 //需要用的框架 #import //定位比较耗电 //通过网络进行的定位 //定位用户的经纬度 //根据经纬度计算两个位置的距离 //监控用户进入或离开某一区域 //地理编码地名 ->经纬度原创 2017-04-03 15:26:02 · 533 阅读 · 0 评论 -
NSNotification
一、概述NSNotification顾名思义就是通知的作用,一个对象通知另外一个对象,可以用来传递参数、通信等作用,与delegate的一对一不同,通知是多对多的。在一个对象中注册了通知,那么其他任意对象都可以来对这个对象发出通知。 二、NSNotificationCenter每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协转载 2017-04-05 09:18:06 · 643 阅读 · 0 评论 -
NSURLSession
一、概述NSURLSession在2013年随着iOS7的发布一起面世,苹果对它的定位是作为NSURLConnection的替代者,然后逐步将NSURLConnection退出历史舞台。现在使用最广泛的第三方网络框架:AFNetworking、SDWebImage等等都使用了NSURLSession。Session翻译为中文意思是会话,我们知道,在七层网络协议中有物理层->数据链路转载 2017-04-05 09:17:30 · 604 阅读 · 0 评论 -
Protocol(协议)
一、概述Protocol(协议)的声明看起来类似一个类的接口,不同的是Protocol没有父类也不能定义实例变量。Protocol是一种特殊的程序设计结构,用于声明专门被别的类实现的方法。因为OC是单继承的,由于不支持多继承,所以很多时候都是用Protocol和Category来代替实现多继承。Protocol只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,转载 2017-04-05 09:15:08 · 13344 阅读 · 0 评论 -
Quartz2D
一、概述Quartz2D的API是纯C语言的,它是一个二维绘图引擎,同时支持iOS和Mac系统。Quartz2D的API来自于Core Graphics框架,数据类型和函数基本都以CG作为前缀。通常,我们可以使用系统提供的控件去完成大部分UI,但是有些UI界面极其复杂、而且比较个性化,用普通的UI控件无法实现,这时可以利用Quartz2D技术将控件内部的结构画出来,类似自定义控件。其实,i转载 2017-04-05 09:14:40 · 429 阅读 · 0 评论 -
RunLoop
一、概述一般来说,一个线程只能执行一个任务,执行完就会退出,如果我们需要一种机制,让线程能随时处理时间但并不退出,那么 RunLoop 就是这样的一个机制。Runloop是事件接收和分发机制的一个实现。RunLoop实际上是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行;而且在转载 2017-04-05 09:14:10 · 342 阅读 · 0 评论 -
KVC
一、概述KVC(Key-value coding)键值编码,iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态在访问和修改对象的属性,而不是在编译时确定。在实现了访问器方法的类中,使用点语法和KVC访问对象其实差别不大,二者可以任意混用。但是没有访问起方法的类中,点语法无法使用,这时KVC就有优势了转载 2017-04-03 15:52:59 · 695 阅读 · 0 评论 -
iOS中图片自适应拉伸
一、概述图片拉伸在移动开发中特别常见,比如常用的即时通讯应用中的聊天气泡就需要根据文字长度对背景图片进行拉伸自适应。在Android中实现图片的拉伸特别特别简单,甚至不用写一行代码,直接使用.9图片进行划线即可。但是iOS就没这么简单了,比如对于下面的一张图片(原始尺寸:200*103):我们不做任何处理,直接将它用作按钮的背景图片:转载 2017-04-03 15:51:59 · 2831 阅读 · 0 评论 -
使用 LLDB 调试 APP(在打印区调试)
一、概述LLDB全称 [ Low Level Debugger ], 默认内置于Xcode中的动态调试工具。标准的 LLDB 提供了一组广泛的命令,旨在与熟悉的 GDB 命令兼容。 除了使用标准配置外,还可以很容易地自定义 LLDB 以满足实际需要。 二、LLDB调试命令首先先通过一个简单的例子体验下 LLDB 调试:我们在上面第25行添加了断点,运转载 2017-04-03 15:32:27 · 3165 阅读 · 0 评论 -
深复制和浅复制
1、概述对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接拷贝整个对象内存到另一块内存中。如下图:再简单些说:浅复制就是指针拷贝;深复制就是内容拷贝。 2、集合的浅复制 (shallow copy)集合的浅复制有非常多种方法。当你进行浅复制时,会向原始的集合发送retain消息,引用转载 2017-04-03 15:30:53 · 533 阅读 · 0 评论 -
内存管理
概述无论是ios还是android中,系统对每个程序运行时内存的占用都有一个限制,默认都是几十M左右大小,当程序占用的内存的大小超过限制时,程序可能就会被强制退出。在内存中,分为堆和栈,栈中主要存放变量,堆中主要存放对象。栈中的东西是系统自动回收的,当一个变量使用完毕后,存放在栈中的东西会立刻被回收。但堆中存储的东西是不会随便回收的。由于移动设备的内存有限,所以我们需要对内转载 2017-04-03 15:28:15 · 266 阅读 · 0 评论 -
离屏渲染
一、概述OpenGL ES是一套多功能开放标准的用于嵌入系统的C-based的图形库,用于2D和3D数据的可视化。OpenGL被设计用来转换一组图形调用功能到底层图形硬件(GPU),由GPU执行图形命令,用来实现复杂的图形操作和运算,从而能够高性能、高帧率利用GPU提供的2D和3D绘制能力。iOS系统默认支持OpenGl ES1.0、ES2.0以及ES3.0 3个版本,三者之间并不是简单的转载 2017-04-03 15:27:02 · 12386 阅读 · 0 评论 -
触摸事件(含手势)
一、概述在APP的开发过程中,可能需要利用手势操作去实现一些功能或者效果。UIKit框架提供了检测常见手势的预定义手势识别器。 在手势开发上,最好尽可能使用预定义的手势识别器,因为它们的简单性减少了我们的的代码量。当然,我们也可以自定义一些特殊的手势,具体的可以查看官方文档学习:Creating a Custom Gesture Recognizer。iOS中的事件可以分为3大类型:触转载 2017-04-03 15:24:22 · 387 阅读 · 0 评论 -
@property参数
一、@property参数1、第一组内存管理特性:retain assign copy strong weak unsafe_unretained autoreleasing2、第二组读 /写特性:readwrite readonly3、第三组多线程特性:nonatomic atomic4、第四组方法名特性:setter getter转载 2017-04-03 15:21:46 · 3311 阅读 · 0 评论 -
通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录、微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等。今天将和大家一起学习如何使用系统应用、使用系统服务:调用系统应用使用系统服务短信与邮件通讯录蓝牙社交Game Center应用内购买iCloudPassbook目 录系统应用在开发某些应用时可能希望能够调用iOS转载 2017-03-30 17:16:40 · 1547 阅读 · 0 评论 -
音频 和 视频
概览随着移动互联网的发展,如今的手机早已不是打电话、发短信那么简单了,播放音乐、视频、录音、拍照等都是很常用的功能。在iOS中对于多媒体的支持是非常强大的,无论是音视频播放、录制,还是对麦克风、摄像头的操作都提供了多套API。在今天的文章中将会对这些内容进行一一介绍:音频音效音乐音频会话录音音频队列服务视频MPMoviePlayerControllerMPMovie转载 2017-03-30 16:57:22 · 2330 阅读 · 0 评论 -
正则表达式
几个正则表达式编辑器Debuggex :https://www.debuggex.com/PyRegex:http://www.pyregex.com/Regexper:http://www.regexper.com/正则表达式是一种查找以及字符串替换操作。正则表达式在文本编辑器中广泛使用,比如正则表达式被用于:检查文本中是否含有指定的特征词找出文中匹配特征词的位置从文本中转载 2017-04-03 15:34:21 · 442 阅读 · 0 评论 -
Autolayout
SDAutoLayout是一个实现自动布局的开源库,该框架的开发者声称可以一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应等。我个人还是比较喜欢这个库的,目前也一直在用这个库,iOS布局起来的确省事不少。其实实现原理也很简单,其内部方法还是我们布局时候常用的方法,只不过该框架的开发者将这些内容封装起来,减少了代码量。这里只做框架推转载 2017-04-03 15:35:45 · 235 阅读 · 0 评论 -
instancetype和id区别
一、概述instancetype是clang 3.5开始提供的一个关键字,与id一样表示某个方法返回的未知类型的Objective-C对象。但是instancetype和id区别到底有什么区别呢? 二、关联返回类型和非关联返回类型要搞懂id 和instancetype的异同 首先要弄懂iOS中两个概念:关联返回类型和非关联返回类型。 1、关联返回类型转载 2017-04-03 15:50:46 · 806 阅读 · 0 评论 -
FMDB
一、概述FMDB是iOS平台的SQLite数据库框架,它以OC的方式封装了SQLite的C语言API。FMDB的优点:(1)使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码。(2)对比苹果自带的Core Data框架,更加轻量级和灵活。(3)提供了多线程安全的数据库操作方法,有效地防止数据混乱。FMDB链接:https://github.com/ccg转载 2017-04-03 15:49:37 · 2875 阅读 · 0 评论 -
Delegate
一、概述为什么我把本篇文章命名为《iOS Delegate用法》而不是《iOS Delegate详解》呢?因为Delegate并没有什么好说的,因为Delegate是基于Protocol实现的。所以这里只讲用法。 二、Delegate用法第一步:在使用协议的AClass类中定义一个协议,常以”类名+Delegate “命名,比如AClassDelegate,转载 2017-04-03 15:48:32 · 298 阅读 · 0 评论 -
CoreData
一、概述Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,不需要编写任何SQL语句。使用此功能,要添加CoreData.framework和导入主头文件。二、相关内容及功能1、NSManagedObject通过Core Dat转载 2017-04-03 15:47:25 · 2509 阅读 · 0 评论 -
Core Animation
一、概述Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。它可以用在Mac OS X和iOS平台。Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。要注意的是,Core Animation是直接作用在CALayer上的,并非UIV转载 2017-04-03 15:45:58 · 352 阅读 · 0 评论 -
Category
一、概述Category是Objective-C 2.0之后添加的语言特性,Category又叫分类、类别、类目,能够在不改变原来类内容的基础上,为类增加一些方法。除此之外,Category还有以下功能:(1)将类的实现分开写在几个分类里面。这样做的好处:可以减少单个文件的体积可以把不同的功能组织到不同的Category里可以由多个开发者共同完成一个类可以按需加载想要的转载 2017-04-03 15:44:30 · 309 阅读 · 0 评论 -
CALayer
一、概述在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView,其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层:转载 2017-04-03 15:43:22 · 247 阅读 · 0 评论 -
Block
一、概述闭包 = 一个函数「或指向函数的指针」+ 该函数执行的外部的上下文变量「也就是自由变量」;Block 是 Objective-C 对于闭包的实现。其中,Block:可以嵌套定义,定义 Block 方法和定义函数方法相似Block 可以定义在方法内部或外部只有调用 Block 时候,才会执行其{}体内的代码本质是对象,使代码高聚合 使用 clang 将转载 2017-04-03 15:42:11 · 538 阅读 · 0 评论 -
用tableView 的 headerView 时遇到的一个问题
////UITableViewStyleGrouped 十二万分警告 , 如果用Conroller的View用作tableView的头部,那tableView 的类型应该为UITableViewStylePlain 。如果用 UITableViewStyleGrouped 那hederView的顶部会多出一块...原创 2019-01-04 16:53:05 · 841 阅读 · 0 评论