王中周的技术博客

Stay hungry,stay foolish.

iPhone屏幕知识点解析

iphone5-6

一、屏幕相关知识点

1、屏幕尺寸

在显示器世界里,屏幕尺寸都是由屏幕对角线长度表示的,单位是英寸。比如iPhone4的3.5寸屏就意味着屏幕对角线的长度是3.5英寸。

2、分辨率

分辨率是任何一款手机产品最重要的参数之一。显示屏是由一个个像素组成的,分辨率可以简单理解成屏幕像素的数目。比如iPhone4的屏幕分辨率为640×960,就表示屏幕的横向有640个像素点,纵向有960个像素点。

iOS屏幕旋转学习笔记

一、两种orientation

了解屏幕旋转首先需要区分两种orientation

1、device orientation

设备的物理方向,由类型UIDeviceOrientation表示,当前设备方向获取方式:

1
[UIDevice currentDevice].orientation

该属性的值一般是与当前设备方向保持一致的,但须注意以下几点:

①文档中对该属性的注释:

1
@property(nonatomic,readonly) UIDeviceOrientation orientation;       // return current device orientation.  this will return UIDeviceOrientationUnknown unless device orientation notifications are being generated.

所以更推荐下面这种用法:

WWDC2014之App Extensions学习笔记

wwdc_banner_promo

一、关于App Extensions

extension是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补iOS的沙盒机制对应用间通信的限制。

extension的出现,为用户提供了在其它应用中使用我们应用提供的服务的便捷方式,比如用户可以在Todaywidgets中查看应用展示的简略信息,而不用再进到我们的应用中,这将是一种全新的用户体验;但是,extension的出现可能会减少用户启动应用的次数,同时还会增大开发者的工作量。

WWDC2014之iOS使用动态库

苹果的开放态度

WWDC2014上发布的Xcode6 beta版有了不少更新,其中令我惊讶的一个是苹果在iOS上开放了动态库,在Xcode6 Beta版的更新文档中是这样描述的:

Frameworks for iOS. iOS developers can now create dynamic frameworks. Frameworks are a collection of code and resources to encapsulate functionality that is valuable across multiple projects. Frameworks work perfectly with extensions, sharing logic that can be used by both the main application, and the bundled extensions.

详情见官方文档New Features in Xcode 6 Beta

framework是Cocoa/Cocoa Touch程序中使用的一种资源打包方式,可以将将代码文件、头文件、资源文件、说明文档等集中在一起,方便开发者使用,作为一名Cocoa/Cocoa Touch程序员每天都要跟各种各样的Framework打交道。Cocoa/Cocoa Touch开发框架本身提供了大量的Framework,比如Foundation.framework/UIKit.framework/AppKit.framework等。需要注意的是,这些framework无一例外都是动态库。

iOS进程间通信之CFMessagePort

iOS系统是出了名的封闭,每个应用的活动范围被严格地限制在各自的沙盒中。尽管如此,iOS还是提供了若干进程间通信机制,CFMessagePort就是其中之一。

从类名可以看出,CFMessagePort属于Core Foundation层的东西,其实现部分是开源的,代码在可以在苹果的开源代码库中找到。

使用方式

1、消息接收者

CFMessagePort端口消息的接收者需要实现以下功能:

1.1 注册监听

消息接收者需要通过以下方式注册消息监听:

1
2
3
4
5
6
7
8
9
10
11
-(void)startListenning
{
  if (0 != mMsgPortListenner && CFMessagePortIsValid(mMsgPortListenner))
  {
      CFMessagePortInvalidate(mMsgPortListenner);
  }
    mMsgPortListenner = CFMessagePortCreateLocal(kCFAllocatorDefault,CFSTR(LOCAL_MACH_PORT_NAME),onRecvMessageCallBack, NULL, NULL);
    CFRunLoopSourceRef source = CFMessagePortCreateRunLoopSource(kCFAllocatorDefault, mMsgPortListenner, 0);
    CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopCommonModes);
    NSLog(@"start listenning");
}

iOS模拟器Custom Location被重置解决方案

问题说明

在做地图类应用时,经常需要用到位置模拟功能。iOS模拟器提供了该功能,我们可以设置指定的经纬度,选中模拟器后,按照以下菜单层次进入即可设置:

1
Debug --> Location --> Custom Location

但是该功能存在的问题是设置完经纬度每次重新run程序,或者重启模拟器的时候都有可能使之前设置的Location状态从Custom Location变成None,导致设置的经纬度信息无效。

因此经常需要重新选择Custom Location,对于每天需要run程序n次的我们来说苦不堪言…

解决方案

好在Xcode的target设置项中提供了设置位置信息的方法,允许我们使用GPX文件来设置自定义位置信息,步骤如下:

加密你的SQLite

关于SQLite

SQLite是一个轻量的跨平台的开源的数据库引擎,它的在读写效率消耗总量延迟时间整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS、Android)。

然而免费版的SQLite有一个致命缺点:不支持加密。这就导致存储在SQLite中的数据可以被任何人用任何文本编辑器查看到。比如国内某团购iOS客户端的DB缓存数据就一览无余:

Xcode设置项之Architectures和Valid Architectures

iPhone指令集

本文所讲的内容都是围绕iPhone的CPU指令集(想了解ARM指令集的同学请点击这里),现在先说说不同型号的iPhone都使用的是什么指令集:

1
2
3
4
ARMv8/ARM64 = iPhone 5s, iPad Air, Retina iPad Mini
ARMv7s = iPhone 5, iPhone 5c, iPad 4
ARMv7  = iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini  
ARMv6  = iPhone, iPhone 3G, iPod 1G/2G

设置你想支持的指令集

Xcode中关于生成二进制包指令集相关的设置项有以下三个:

自定义你的Octopress博客

SEO

  • 增加统计工具

博客搭建好了以后,大家一定很想知道每天都有多少的访问量。现在有很多工具都可以帮助我们做这件事,比如Google Analytics百度统计CNZZ 等。

其中Google Analytics是Octopress自带的统计工具,使用方式也非常简单,只需要到Google Analytics申请一个app id,填写到_config.yml文件中的google_analytics_tracking_id后面即可。但Google Analytics存在翻墙的麻烦,而且百度统计功能也挺齐全,完全能满足我的需求,就选择了百度统计

集成百度统计方式非常简单:

只需到百度统计官方网站申请一个账号,将获取的代码添加到source/_includes/custom/footer.html中,重新部署即可。

github优秀开源项目大全-iOS

前言

  1. 本文旨在搜集github上优秀的开源项目

  2. 本文搜集的项目都是用于iOS开发

  3. 本文会持续更新…

完整客户端

github的iOS客户端,目前开源代码是V1版本,V2版本在appstore上可以下载

使用XMPP协议的IM开源软件,很强大,在appstore上可以下载