一、UIWebView

UIWebView基本用法

UIWebView可以加载本地或远程HTML页面。使用UIWebView的loadRequest:即可完成加载工作,十分简单。但一般我们加载本地HTML页面时,会使用UIWebView的loadHTMLString:方法,这么做有两点好处:一是安全,二是避免中文乱码:

閱讀全文 »

第一部分:网络通信协议基础知识

网络通信协议(Network Communication Protocol),通常简称为“网络协议”(Network Protocol),是对计算机之间通信的信息格式、能被收/发双方接受的传送信息内容的一组定义。网络协议实现了OSI七层参考模型功能,各层都有许多负责各个不同方面,解决不同问题的通信协议。各层网络协议,有上千种之多。下面附上一张图大家可以体会一下:
image description

OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

閱讀全文 »

大部分企业级iOS应用开发者,都很少接触发布应用的环节。这些工作一般都会是你的项目经理、技术主管来负责。不过我觉得作为iOS开发者,不了解如何发布企业级应用,有些不完美。刚好最近帮助另外一个部门的同事解决了一些发布问题,借此机会,把过程总结一下,希望可以带给大家一些参考。

一、发布应用完整流程

image description
大家想了解完整的流程,可以参考App Distribution Guide

本文我们主要讲解发布企业级iOS应用流程中,Member Center 和 Xcode 操作的内容。

二、发布企业级iOS应用流程

发布企业级iOS应用流程如下图所示:

image description

閱讀全文 »

本文是在斯坦福大学公开课 Lecture 12 : Core Data Lecture 13 Final Project Overview课程笔记的基础上,进行了修改和扩充。未接触过Core Data的朋友可以先看下这两节公开课。当然,您也可以直接看本教程,基本上课程中讲到的内容精华下文都会包含。

公开课中讲解的内容,主要是基于UIManagedDocument来管理Core Data。大家可能很难搜索到类似的资料。国内资料还是基于苹果官网做法-使用三大核心对象管理Core Data,因此我在课程笔记中,用红色标题来补充这些内容,请大家阅读时加以区分。在第一部分的末尾,我会给出这两种方式的完整代码。

本文整体内容比较初级,没有涉及Core Data中线程同步、缓存刷新、回滚操作、防止误删等内容,想学习这些内容的请关注我后续文章。

閱讀全文 »

本文目录结构如下:

  • 一、iOS中的沙盒机制
  • 二、文件系统
  • 三、属性列表 (Property List)
  • 四、偏好设置 (NSUserDefaults)
  • 五、对象归档
  • 六、SQLite3
  • 七、Core Data

为了避免篇幅太长,本文重点介绍前6部分内容,Core Data会在后续博文中详细讲解。

閱讀全文 »

先看看关于Runloop的面试题:

  1. Runloop和线程有什么关系?
  2. Runloop的mode作用是什么?
  3. 以+ scheduledTimerWithTimeInterval…的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为什么?如何解决?
  4. 猜想Runloop内部是如何实现的

带着这些问题,我们系统的学习下Runloop。

閱讀全文 »

官方文档:Custom Layouts: A Worked Example

创建自定义布局有着直接的要求,但实现细节的过程可能会有所不同。你的布局对象需要为collection view包含的所有视图创建布局属性对象,这些属性对象的创建顺序视具体的应用程序而定。对于包含上千个item的collection view,事先计算和缓存布局属性是一个很耗时的过程,所以更有意义的做法是只有特定item被请求时才创建布局属性。然而对于仅包含若干个item的collection view,事先计算好所有的布局信息并放入缓存,而不是只有特定item被请求时才创建布局属性,会节省许多不必要的重复计算。本章的例子属于第二类。

閱讀全文 »

官方文档:Creating Custom Layouts

在自定义布局之前,请先考虑你是否真的需要这样做。 UICollectionViewFlowLayout已经为你提供了大量、效率优化过的行为,您可以通过不同的方式来实现多类典型布局。只有如下情况,你才需要自定义布局:

  • 非网格或者线性布局——基础的断裂性布局 based breaking layout(各item排列成一行,直到这一行排满,会另起一行,如此重复直到所有item全部排列完毕)或者必须在不同方向上的滚动的布局。
  • 你需要频繁的改变所有cells的位置,且修改已有布局类的工作量大于自定义布局的工作量。

好消息是,基于API的观点,实现自定义布局并不困难。最难的部分在于计算布局中items的位置。一旦你直到了这些items的位置,那么为collection view提供布局信息将会轻而易举。

閱讀全文 »

官方文档: UICollectionViewLayout Class Reference

继承关系:

  • NSObject
    • UICollectionViewLayout
      • UICollectionViewFlowLayout
      • UICollectionViewTransitionLayout

遵从协议:

  • NSCoding
  • NSObject

UICollectionViewLayout是一个抽象的基础的layout object,你可以使用UICollectionViewLayout的子类来生成布局信息,以供collection view使用。layout object决定如何放置cells、supplementary views、 decoration views,并在collection view请求这些信息时能够及时提供。当collection view获取到这些信息之后,会通知相应的视图来呈现。

当你需要使用布局对象时,必须要使用UICollectionViewLayout的子类。当你考虑自定义UICollectionViewLayout的子类时,请先查看一下 UICollectionViewFlowLayout是否已经可以满足你的要求。

閱讀全文 »