Objective C 中的nil,Nil,NULL和NSNull理解

On 2013 年 4 月 16 日, in iPhone, by donly

ObjC 里面的几个空值符号经常会差点把我搞死,这些基础的东西一点要弄清楚才行,以提高码农的基本素质。

nil

  • nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interface 声明的 ObjC 对象。
  • 例如:
    NSString *someString = nil;
    NSURL *someURL = nil;
    id someObject = nil;
    
    if (anotherObject == nil) // do something
  • 定义:
    // objc.h
    #ifndef nil
    # if __has_feature(cxx_nullptr)
    #   define nil nullptr
    # else
    #   define nil __DARWIN_NULL
    # endif
    #endif
    
    // __DARWIN_NULL in _types.h
    
    #define __DARWIN_NULL ((void *)0)

Continue reading »

Tagged with:  

KVC 与 KVO 理解

On 2012 年 6 月 7 日, in iPhone, by donly

KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解。

Key-Value Coding (KVC)

KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性。KVO 就是基于 KVC 实现的关键技术之一。

一个对象拥有某些属性。比如说,一个 Person 对象有一个 name 和一个 address 属性。以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 address 的 key。 key 只是一个字符串,它对应的值可以是任意类型的对象。从最基础的层次上看,KVC 有两个方法:一个是设置 key 的值,另一个是获取 key 的值。如下面的例子:

void changeName(Person *p, NSString *newName)
{

    // using the KVC accessor (getter) method
    NSString *originalName = [p valueForKey:@"name"];

    // using the KVC  accessor (setter) method.
    [p setValue:newName forKey:@"name"];

    NSLog(@"Changed %@'s name to: %@", originalName, newName);

}

现在,如果 Person 有另外一个 key 配偶(spouse),spouse 的 key 值是另一个 Person 对象,用 KVC 可以这样写:

Continue reading »

Tagged with:  

Objective C NSTimer 使用

On 2012 年 5 月 24 日, in iPhone, by donly

NSTimer
的使用并不复杂,简单介绍在iOS开发中经常会用到的几种方式。

创建 NSTimer

  1. Scheduled Timers & Using Selector

  2. 如上,如果没有重复执行的timer相当于 [self performSelector:@selector(targetMethod:) withObject:nil afterDelay:2.0];

    Continue reading »

Tagged with:  

iOS 开发教程,HelloWorld

On 2012 年 3 月 31 日, in 未分类, by donly

为了方便大家入门iOS开发,写个简单的iOS项目让大家了解一下 iPhone, iPad 等应用程序是如何开发出来的。本文只是快速入门,不涉及 Objective C 语法讲解,Xcode 与 User Interface 使用等。

开发环境

  1. Mac OS X 10.7.3
  2. Xcode Version 4.3.2 (4E2002)

开发流程

  1. 选择项目模板,Choose ‘Empty Application’ for your new project. 下一步。
  2. 填写模板选项,项目名称 ‘HelloWorld’,下一步。
  3. 选择项目工作空间,创建项目完成。

Continue reading »

Tagged with:  

ObjectiveC 深浅拷贝学习

On 2011 年 3 月 9 日, in iPhone, by donly

在ObjC中,什么是深浅拷贝? 深浅拷贝分别指深拷贝和浅拷贝,即mutableCopy和copy方法。 copy复制一个不可变对象,而mutableCopy复制一个mutable可变对象。 什么时候用到深浅拷贝?下面举几个例子说明。

Continue reading »

Tagged with: