iOS梦工厂

iCocos——不战胜自己,何以改变未来!

字典转模型深究

| Comments

引言: 在文字开始之前先介绍两个软件:

JSONExport

JSON Accelerator

关于模型类的两个神器,我也是刚接触不久,但是感觉非常有用,基本上可以节省你在模型类上的99%的时间。

  • 如果你觉得自己对应本文后面的内容非常了解,那么请直接下载上面的软件试试。
  • 如果你并不是很熟练,那么轻认真看完后面的内容,相信对你有好处,再去下载对应的软件。

关于Plist转模型在iOS开发中是非常常见的,每开一一个项目或者实现一个功能都要用到它,所以今天就给大家讲讲Plist怎么转成模型数据,

前提:必须有一个Plist文件或者通过一定的方式返回的plist数据

H5应用实战

| Comments

前言: ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了。

标准通用标记语言下的一个应用HTML标准自1999年12月发布的HTML4.01后,后继的HTML5和其它标准被束之高阁,为了推动Web标准化运动的发展,一些公司联合起来,成立了一个叫做 Web Hypertext Application Technology Working Group (Web超文本应用技术工作组 -WHATWG) 的组织。WHATWG 致力于 Web 表单和应用程序,而W3C(World Wide Web Consortium,万维网联盟) 专注于XHTML2.0。在 2006 年,双方决定进行合作,来创建一个新版本的 HTML。

这段时间在研究H5相关,由于本人主攻的是ios开发,所以后期主要的任务就是,使用H5+Css+JP编写好的代码在OC中使用,或者相互调用。

这里就给大家介绍一下后面的内容,关于前面的内容后期会陆续更新相关文章与总结。

H5初探

| Comments

H5精华

标准通用标记语言下的一个应用HTML标准自1999年12月发布的HTML4.01后,后继的HTML5和其它标准被束之高阁,为了推动Web标准化运动的发展,一些公司联合起来,成立了一个叫做 Web Hypertext Application Technology Working Group (Web超文本应用技术工作组 -WHATWG) 的组织。WHATWG 致力于 Web 表单和应用程序,而W3C(World Wide Web Consortium,万维网联盟) 专注于XHTML2.0。在 2006 年,双方决定进行合作,来创建一个新版本的 HTML。

粘贴深究

| Comments

在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。

一、在iOS中下面三个控件,自身就有复制-粘贴的功能:

  • 1、UITextView
  • 2、UITextField
  • 3、UIWebView

事件处理与图像渲染深究

| Comments

iOS 事件处理机制与图像渲染过程

  • iOS RunLoop都干了什么
  • iOS 为什么必须在主线程中操作UI
  • 事件响应
  • CALayer
  • CADisplayLink 和 NSTimer
  • iOS 渲染过程
  • 渲染时机
  • CPU 和 GPU渲染
  • Core Animation
  • Facebook Pop介绍
  • AsyncDisplay介绍
  • 参考文章

玩转定时器

| Comments

在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法。在这个时候,我们就需要用到定时器。

然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer、CADisplayLink、GCD。接下来我就一一介绍它们的用法。

UITableView性能优化与卡顿问题

| Comments

引言:

在iOS开发中关于TableView算是已经用烂了的控件,但是又有几个人认真去考路过他的性能优化问题(卡顿)

最近项目中也遇到了不少卡顿的问题,为了更好的饿提高项目的性能,也为了提高自己的技术,专门花了一段时间研究了一下关于TableView的性能问题,在这里就总结了一下,希望可以帮你解决实际问题。

蓝牙开发你知道多少

| Comments

蓝牙简单介绍和4.0的基本使用

背景:

  • iOS的蓝牙不能用来传输文件。
  • iOS与iOS设备之间进行数据通信,使用gameKit.framework
  • iOS与其他非iOS设备进行数据通信,使用coreBluetooth.framework

相册深究

| Comments

一. 概要

在 iOS 设备中,照片和视频是相当重要的一部分。最近刚好在制作一个自定义的 iOS 图片选择器,顺便整理一下 iOS 中对照片框架的使用方法。在 iOS 8 出现之前,开发者只能使用 AssetsLibrary 框架来访问设备的照片库,这是一个有点跟不上 iOS 应用发展步伐以及代码设计原则但确实强大的框架,考虑到 iOS7 仍占有不少的渗透率,因此 AssetsLibrary 也是本文重点介绍的部分。而在 iOS8 出现之后,苹果提供了一个名为 PhotoKit 的框架,一个可以让应用更好地与设备照片库对接的框架,文末也会介绍一下这个框架。

另外值得强调的是,在 iOS 中,照片库并不只是照片的集合,同时也包含了视频。在 AssetsLibrary 中两者都有相同类型的对象去描述,只是类型不同而已。文中为了方便,大部分时候会使用「资源」代表 iOS 中的「照片和视频」。

二. AssetsLibrary 组成介绍

AssetsLibrary 的组成比较符合照片库本身的组成,照片库中的完整照片库对象、相册、相片都能在 AssetsLibrary 中找到一一对应的组成,这使到 AssetsLibrary 的使用变得直观而方便。

函数&方法的奥秘

| Comments

首先问个问题,你知道函数与方法的区别吗?

什么?没有区别?那你就out了!

函数(function),方法(method),之前没细究它们的不同,随心所欲的想说哪个就说哪个,“这个初始化函数…”,“这个初始化方法…”,看着都差不多,没什么区别。 直到前几天,一个新来的同事,在看我整理的 Objective-C代码规范文档,里面有一段是这样的:

初始化函数
- (void)init
{
…
} 
…

他看到后,疑惑的跟我说:“你这表达方式不对吧,你标题说的是函数,但是内容却说的是方法。” 哦?原来函数跟方法是不一样的。

函数

一个代码块,完成特定的功能,然后将结果返回给调用方,常见的函数的格式是这样的:

<return type> <function name> (<arg1 type> <arg1 name>, <arg2 type> <arg2 name>, ... )
{
  // Code here
}
一个函数声明与调用的例子:

// 实现函数
int plus(int x, int y)
{
  return x * y;
}

int main (int argc, const char *argv[])
{
  int x = 2;
  int y = 3;
  // 调用函数
  int result = plus(x, y);

  return 0;
}

方法

也是一个代码块,不过方法是需要写在类里面的,调用时需要类或者对象才可以调用,一个 Objective-C 的方法例子如下:

@implementation Person

// 实现方法
- (void)setName:(NSString *)name
{
  //code here
}

@end

int main (int argc, const char *argv[])
{
  // 使用对象调用方法
  [[Person new] setName:@"zhenby"];

  return 0;
}

有什么不同

那说到底,函数跟方法的不同就是:方法是属于类或者对象的,而函数则不一定,可以独立于类与对象之外,独立调用,所以可以说 函数 >= 方法,因此方法也可以叫 member function。

Objective-C中的函数

Objective-C 中一般的函数是全局有效的(可在函数前加 static 关键字使得该函数只在该文件中有效),即在一个文件中实现了一个函数,在同个项目中的其他代码中都可以直接调用此函数,所以定义函数时,函数名需要唯一,重复的函数名(不管参数是否一致)是编译不过的。 知道这个特性后,就可以把一些常用的代码块,比如获取当前时间戳这样的功能的整理成了一个函数,这样的好处是项目中的代码在需要时都可以直接调用,而不需要类或者对象,类似于 NSLog 函数。

而我在实现函数的时候,遇到了一个这样的警告“no previous prototype for function xxx ”,这个警告的意思是没找到一个前置的函数原型,在文件的顶端,或者头文件(如果有的话)加上你所加的函数原型就可以了,例如:

// 函数原型
int plus(int, int);
/*
 如果参数为空的话,在函数原型中需要传 void,在函数原型中参数为空的话,
 在C中表示此函数可以接受任意个参数,在 Objective-C 中也有一样的规则
 */
long timestamp(void);


// 实现函数
int plus(int x, int y)
{
  return x * y;
}

long timestamp()
{
  // 返回当前的时间戳
    return (long)[[NSDate date] timeIntervalSince1970];
}

Objective-C中的方法

在 Objective-C 中,方法的调用是通过消息传递来进行的,需要在运行时才能确定方法的地址(只要知道一个类的方法名,不管这个方法是否公开,都可以调用到,这也是为啥苹果的私有 API 会被挖出来,所以也没有受保护方法这样的说法,方法要么是公开的,要么是不公开的,无论公不公开,通过方法名都可以调用到方法),而消息传递就是通过id objc_msgSend(id theReceiver, SEL theSelector, …)这个函数来达到目的的,可以说 Objective-C 中的方法,其实相当于固定前两个参数的 objc_msgSend 函数。比如:

@implementation Test

- (long)timestamp
{
  NSLog(@"in timestamp");
  // 返回当前时间戳   
    return (long)[[NSDate date] timeIntervalSince1970];
}

@end

// 调用 timestamp 方法
Test *test = [Test new];
[test timestamp];
[test release];

//----------------------------------------------------------

/*
 上面 [test timestamp] 这句代码就相当于以下的函数调用,
 直接执行下面的代码,也可以在控制台中打印出 in timestamp。
 */
#import <objc/message.h>

objc_msgSend(test, @selector(timestamp));

如果你还不了解是什么回事,那么你可以看看swift,我记得在学习swift1.2版的时候,官方提到了函数与方法的区别和注意点!



微信号:

clpaial10201119(Q Q:2211523682)

微博WB:

http://weibo.com/u/3288975567?is_hot=1

gitHub:

https://github.com/al1020119

博客

http://al1020119.github.io/