APPKit(APPlicationKit)简介

原创 2015年11月21日 19:50:34

1 . IBOutlet和IBAction关键字

IBOutlet:的定义没有任何作用,因此将不会对他进行编译。

IBAction:定义为void,即以IBAction声明的方法的返回类型是void(也就是什么都不返回)。

IBOutlet和IBAction实际上是为Interface Builder(IB)以及阅读代码的人提供的标记。通过查找这两个关键字,Interface Builder知道某个对象具有两个能够连接的实例变量。


2 . NSDate

    +dateWithTimeIntervalSinceNow:       方法接受一个NStimeInterval参数,该参数是一个双精度值,表示以秒为单位的时间间隔。通过该参数可以指定时间偏移的方式:对于将来的时间,使用正的时间间隔;对于过去的时间,使用负的时间间隔。


3 . KVC

KVC即为键/值编码。在键/值编码中的基本调用包括 -valueForKey: 和 -setValue:forKey:。以字符串的形式向对象发送消息,这个字符串是我们关注的属性的关键。

当使用valueForKey: 时,它自动将标量值(int、float、struct)放入NSNumber和NSValue中。

如果在调用 -setValue:forKey: 之前设置一个标量值,你需要将它包装起来(把它大包)。例如:[car setValue : [NSNumber numberWithFloat:2] forKey : @"mileage"];

为什么不用KVC来处理所有对象?因为KVC需要解析字符串来计算你所需要的答案,因此速度比较慢。编译器还无法对它进行错误检查。


4 . 注意<null>和(null)之间的区别

<null>是一种[NSNull null] 对象,而(null)是一个真是存在的nil值。


5 . NSPredicate

NSPredicate 用于指定过滤器的条件。可以创建NSPredicate对象,通过该对象准确的描述所需的条件,对每个对象通过谓词进行筛选,判断他们是否与条件相匹配。

1 . 创建谓词:

Car *car = makeCar(@"Heibie", @"Honder", @"CRX", 1984, 2, 110000, 58); // 汽车信息:品牌为Herbie,型号为双门1984HondaCRX,马里引擎为58,行驶距离110000
NSPredicate *predicate = [NSPredicate predicateWithFormat : @"name == 'Herbie'"]; // 通过这步我们就可以得到一个谓词
BOOL match = [predicate evaluateWithObject : car]; // 通知接收对象(谓词)根据指定的对象计算自身的值 
NSLog(@"%s", (match) ? "YES", "NO");

           假设我们 需要查看车库中哪些汽车的功率最大,可以循环测试每个汽车的谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat : @"engine.horsepower > 150"];
for (Car *car in array) {
<span style="white-space:pre">	</span>if ([predicate evaluateWithObject : car]) {
		NSLog(@"%@", car.name); } } // 输出马力大于150的汽车名字


2 . 燃料过滤器

-filterArrayUsingPredicate: // 该方法是数组中的一种类别方法,它将循环过滤数组内容,根据谓词计算每个对象的值,并将值为YES的对象积累到将被返回的数组中。

NSArray *result = [cars filterArrayUsingPredicate : predicate];

- filterUsingPredicate : // 该方法是NSMutableArray所拥有的。通过该方法可以剔除不属于该数组的所有项目

3 . 格式说明符

通过NSPredicate字符串,也可以使用%k指定键路径。例如:

predicate = [NSPredicate predicateWithFormat:@"%k == %@", @"name", @"Herbie"];

为了构造灵活的谓词,还可以将变量名放入字符串中,类似于环境变量。除了使用NSString外,还可以使用NSNumber,也可以使用[NSNull null]设置nil值,还可以使用数组。不过不能使用$VARIABLE作为键路径,因为它只表示值。使用谓词格式字符串时,如果想通过程序改变键路径,要使用%k格式说明符。

例如:

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"name" == @"$NAME"];
NSDictionary *varDict = [NSDictionary dictionaryWithObjectsAndKeys : @"Herbie", @"NAME", nil]; // 其中键是变量名(不包含$)词是插入谓词的内容,用字符串Heibie作为键“NAME”的值
predicate = [predicateTemplate predicateWithSubstitutionVariables : varDict];

4 . 比较和逻辑运算符

谓词字符串语法支持C语言中一些常用的运算符,例如 == ,=,<,>,还支持括号表达式和AND、OR、NOT逻辑运算符或者C样式的等效表达式&&、||、!。而且运算符不区分大小写,可以随意使用and、And、anD等。

5 . 数组运算符

predicate = [NSPredicate predicateWithFormat:@"engine.horsePower BETWEEN {50, 200}"]; // 或括号表示数组,BETWEEN将数组中第一个元素看成是数组的下届,第二个是上届。

可是用%@格式说明符插入NSArray对象

NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:50], [NSNumber numberWithInt:200], nil];
predicate = [NSPredicate predicateWithFormat:@"engine.horsePower BETWEEN %@", array];

也可以使用变量,类似与上面3中的例子,将字符串@“Herbie”改成数组。

数组并不仅仅用来指定某个区间的端点值。可以使用IN运算符查找数组中是否含有某个特定值。

predicate = [NSPredicate predicateWithFormat:@"name IN {'Heibie', 'Snugs', 'Badger'}"];
results = [cars filterArrayUsingPredicate:predicate];

6 . 字符串运算符

BEGINSWITH : 检查某个字符串是否以另一个字符串开头

ENDSWITH : 检查某个字符串是否以另一个字符串结尾

CONTAINS :  检查某个字符串是否是在另一个字符串内部

以上这些匹配都是区分大小写的。为了减少名称匹配规则,可以为这些运算符添加[ c ]、[ d ]、 [ cd ]。其中c表示:不区分大小写;d表示:不区分发音符号(即没有重音符);cd表示:既不区分大小写、又不区分发音符号。

LIKE:问号表示与一个字符匹配;星号表示与任意个字符比较。

例如:"name LIKE '*er*' " :与任何含有“er”的名称相匹配,这等效于CONTAINS

   "name LIKE '???er*' ":与字符串“Paper Car”相匹配,因为其中的“er”前面有三个字符,“er”后面有一些字符。

      虽然正则表达式的功能强大,但他们的计算开销非常大。如果在谓词中有某些简单的运算符,例如基本字符串运算符和比较运算符,那么在使用MATCHES之前可以先执行简单的运算,这样将会提高程序的运算速度。



版权声明:本文为博主原创文章,未经博主允许不得转载。

Windows下编译objective-C (IOS开发,IOS环境搭建)

转自:http://qb311.iteye.com/blog/1121648 http://www.gnustep.org/experience/Windows.html ftp://ftpmai...
  • shanliangliuxing
  • shanliangliuxing
  • 2012年08月22日 09:25
  • 2544

【读书笔记】iOS-AppKit简介

一,IBOutlet和IBAction.它们实际上只是AppKit提供的#defines.IBOutlet的含义没有任何作用,因此将不对对它时行编译。IBAction定义为void,这意味着在AppC...
  • fanqingtulv
  • fanqingtulv
  • 2015年09月23日 09:13
  • 553

从 UIKit 到 AppKit

Mac 不仅是一个强大的生产平台,也十分值得你为其开发一些东西。去年我们开始构建我们的第一款 Mac 应用,成功为我们日常工作所在的平台开发点东西是一次十分美好的体验。但是,和为 iOS 系统开发应用...
  • qq_16379603
  • qq_16379603
  • 2015年12月21日 15:47
  • 578

Object-c学习笔记十五-----AppKit简介

前面我学习的都是在应用程序里面的,现在我开始学习一些简单的页面。 这个例子就是把文本框里面的英文自动转换成大小的小例子。 首先我先创建一个Cocoa Application新项目,然后在souce...
  • lutaotony
  • lutaotony
  • 2011年10月04日 13:31
  • 1940

Foundation 与 Application Kit 框架

O-C学习 1. Foundation.h。这个是系统框架Foundation framework的头文件,有了它你可以免费的获取系统或者说苹果公司为你精心准备的一系列方便你使用的系统功能,比如说字...
  • Songjs19931206
  • Songjs19931206
  • 2015年03月23日 20:50
  • 740

Cocoa画图

points(NSPoint) 同直角坐标系一样原点在左下角 结构 typedef struct _NSPoint{ float x; float y; }NSPoint; 定义:NSPo...
  • suoxd123
  • suoxd123
  • 2010年01月19日 01:12
  • 3581

AppKit 应用程序设计观(转)

AppKit 应用程序设计观原文来自 Application Design in AppKit.This is a discussion of high-level application desig...
  • ydfok
  • ydfok
  • 2008年12月17日 09:56
  • 1036

第十四章AppKit

在这一章将从Foundation Kit框架转移到Application Ki框架,来创建一个可以用于Mac的桌面程序 一、构建项目 进入Xcode,创建一个新Cocoa Application项...
  • ljloving
  • ljloving
  • 2012年05月25日 18:06
  • 1130

推荐一个blog,iOS 绘图的学习 objective-c 绘图资料

http://donbe.blog.163.com/blog/static/1380480212010423113440827/ 想要学动画,那么就从绘图的基础学起吧 Applicat...
  • a21064346
  • a21064346
  • 2013年01月05日 15:58
  • 1883

Objective-C学习笔记第十四章AppKit

第十四章AppKit 在这一章将从Foundation Kit框架转移到Application Ki框架,来创建一个可以用于Mac的桌面程序 一、构建项目 进入Xcode,创建一个新Cocoa App...
  • u011871552
  • u011871552
  • 2014年10月30日 16:09
  • 409
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:APPKit(APPlicationKit)简介
举报原因:
原因补充:

(最多只允许输入30个字)