随笔分类 -  objc

摘要:GCD是苹果在OS X Snow Leopard跟iOS4后引入的一个技术,利用GCD,我们可以将多线程代码编写的很优雅。在使用GCD前,我们可以简章回顾下传统的多线程技术。1 int main() {2 id o = [[MyObject alloc] init];3 [o execBlock];4 return 0; }中间会有些基本的方法被调用,用图形来表式的话就是下面这样:多线程在应用中可能会有各种问题,常见如下:数据同步,死锁这两个可以算是常见的。那为什么在应用中还要用多线程呢,这是因为多线程可以使我们的应用有更好的响应。Dispatch Queue:是一个队列用来存储一... 阅读全文
posted @ 2014-03-19 23:23 洋芋,阿喜欢! 阅读(828) 评论(4) 推荐(1) 编辑
摘要:地图类开发应用中,离不开地理位置跟MKMapView的使用,下面就记录下自己在使用这两个东西中学到的。不过并不是所有苹果的设备都支持地理位置,我们在使用前应该做个判断,代码如下:1 BOOL locationAvailabe = [CLLocationManager locationServicesEnabled];2 BOOL magnetometerAvailable = [CLLocationManager headingAvailable];在地理位置中,我们用到主要类就是:CLLocationManager,关于它的常见代码如下:1 CLLocationManager *locati 阅读全文
posted @ 2014-03-18 22:32 洋芋,阿喜欢! 阅读(943) 评论(0) 推荐(0) 编辑
摘要:拿c#语言跟objective-c做个对比,记录下自己认为是差不多的东西。学过objc的人相信对category这个东西肯定不陌生,它可以让我们在没有源码的基础上对原先的类添加额外的一些方法,写到这,是不是可以想像到跟c#中的扩展方法很像。是的,它们虽然叫法不一样,但所能完成的功能是一样的。接下来说说objc中的Protocol,这是一个与类无关的概念,任何类都可以实现已经定义好的Protocol,这东西跟c#中的接口差不多,只不过objc中的Protocol有可选跟必选两个概念,那到底是两个什么东西呢?可选就是说你在实现这个Protocol的时候,它的方法你可以选择实现它也可以不去实现,而必 阅读全文
posted @ 2014-03-03 22:48 洋芋,阿喜欢! 阅读(2382) 评论(1) 推荐(0) 编辑
摘要:在当今这样一个各种openapi开放的年代,在熟悉的语言下面找到一款得心应手的将json字符串转换成模型的库可以说是十分必要的,在NET平台下,我们有Newtonsoft.Json这个库使用,那么在ios平台下,有什么可以让我们使用呢,在做iphone开发的时候,找到了jastor这个库,现在就基本的用法做个介绍。假如我们有如下这么一个类 1 #import 2 #import "Jastor.h" 3 4 @interface DeviceEntity : Jastor 5 6 @property (nonatomic,strong) NSNumber *isonline 阅读全文
posted @ 2014-02-17 22:42 洋芋,阿喜欢! 阅读(7852) 评论(4) 推荐(0) 编辑
摘要:在Windows时代,大家肯定对SendMessage,PostMessage,GetMessage有所了解,这些都是windows中的消息处理函数,那对应在ios中是什么呢,其实就是NSRunloop这个东西。在ios中,所有消息都会被添加到NSRunloop中,分为‘input source’跟'timer source'种,并在循环中检查是不是有事件需要发生,如果需要那么就调用相应的函数处理。我们在使用NSTimer的时候,可能会接触到runloop的概念,下面是一个简单的例子: 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad 阅读全文
posted @ 2014-02-13 11:03 洋芋,阿喜欢! 阅读(28178) 评论(1) 推荐(5) 编辑
摘要:何为闭包?引用维基上面的说法,闭包是词法闭包的简称,就是引用了自由变量的函数,这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。下面就自己熟悉的语言都来一种闭包。C#:1 var x = 1;2 Action action = () =>3 {4 var y = 2;5 var result = x + y;6 Console.Out.WriteLine("result = {0}", result);7 };8 action();在action()执行的时候就引用了外界 阅读全文
posted @ 2014-02-12 12:09 洋芋,阿喜欢! 阅读(2166) 评论(0) 推荐(1) 编辑
摘要:在Objective-C中,消息是通过objc_msgSend()这个runtime方法及相近的方法来实现的。这个方法需要一个target,selector,还有一些参数。理论上来说,编译器只是把消息分发变成objc_msgSend来执行。比如下面这两行代码是等价的。1 [array insertObject:foo atIndex:5]; 2 objc_msgSend(array, @selector(insertObject:atIndex:), foo, 5);class的方法列表其实是一个字典,key为selectors,IMPs为value。一个IMP是指向方法在内存中的实现。很重. 阅读全文
posted @ 2014-02-10 11:16 洋芋,阿喜欢! 阅读(3136) 评论(0) 推荐(0) 编辑