Objective-C 基础(四)

使用协议委托任务

协议是一个声明某些方法及属性并储存在实体文档。(通常延伸档名是.h)
任何实践协议的对象,都必须实践协议提供的方法及属性(可在协议中指定是必须或可选)。
协议就像是一些规范,实践协议的类必须遵守这些规范

#import <Foundation/Foundation.h>
@protocol PersonProtocol <NSObject>
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, unsafe_unretained) NSUInteger age;
@end

协议在默认的情况下,所有声明都是必须实现。

我们也可以用
@required关键字明确指定必须的属性与方法。如果你希望协定的方法是可实践或不需实尖的使用@optional关
键字,就可以简单的设定。

#import <Foundation/Foundation.h>
@protocol PersonProtocol <NSObject>
@optional
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;

@property (nonatomic, unsafe_unretained) NSUInteger age;
@required
- (void) breathe;
@end

 

检测实例或类方法是否有效

respondsToSelector: 是一个实例方法,继承自 NSObject。该方法用于检查一个对象是否实现了给定的方法。这里如要使用 @selector。例如:

if ( [self respondsToSelector:@selector(work)] )
{
    printf("I am not lazy.\n");
    [self work];
}

respondsToSelector是向某类的对象发消息,查询是否支持某个实例方法;
instancesRespondToSelector是向某类本身(类名即可)发消息,查询是否支持某个实例方法.
都是查询是否支持某个实例方法, 只是消息接受者不同.

if ([[self class] instancesRespondToSelector:@selector(findWork)])
{
    printf("I can find a job without the help of my mother\n");
}

 

确认类是否可在运行期使用

你正在使用最新版的SDK,但是你无法确定是否可以使用,因为无法肯定用户是否有安装最新版的
SDK

使用NSClassFronString函数。传入类的名称字符串符。若是返回值为空(nil),则表示这个类无法在这台装
置上使用;反之,这个类则可照你希望的在这台装置上使用

if (NSClassFromString(@"NSJSONSerialization") != nil){
/* 你可以使用这个类 */ 
[NSJSONSerialization JSONObjectWithData:... /* 在这传入数据 */ 
options:... /* 在这传入选项 */ 

error:...]; /* 这里处理错误 */
} else {
/* 该类不可用 */
}

 

posted @ 2013-02-03 15:26  Ivan的coding世界  阅读(128)  评论(0编辑  收藏  举报