`

Objective-C基础教程笔记2

阅读更多

 

Foundation Kit

Cocoa由两个不同的框架组成 Foundation Kit和Application Kit

Foundation框架中有很多诸如NSString,NSArray等低级类和数据类型

 

 

#import <Foundation/Foundation.h>
int main(int argc, const char *argv[]){
	NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
	//insert code here...
	NSLog(@"Hello, World!");
	
	[pool drain];
	return 0;
}

 

通过alloc创建并通过init初始化了一个池,在结尾处排空,这是Cocoa内存管理的预览

 

一些有用的数据类型

 

范围 NSRange

 

typedef struct _NSRange{
	unsigned int location;
	unsigned int length;
}NSRange;

 

表示相关事物的范围,如字符串中的字符范围或数组中的元素范围

创建一个新的NSRange有3种方式

 

//1
NSRange range;
range.location=17;
range.length=4;
//2
NSRange range={17,4};
//3
NSRange range=NSMakeRange(17,4);

 

第三种方法的好处是可以在任何能够使用函数的地方使用,比如当作参数

 

[anObject flarbulateWithRange: NSMakeRange(13,15)];

 

 

几何数据类型 NSPoint,NSSize

 

typedef struct _NSPoint{
	float x;
	float y;
}NSPoint;

typedef struct _NSSize{
	float width;
	float height;
}NSSize;

 

比如Cocoa提供了矩形数据类型

 

typedef struct _NSRect{
	NSPoint origin;
	NSSize size;
}NSRect;

 

同样提供了NSMakePoint(),NSMakeSize(),NSMakeRect()方法

将这些数据类型作为struct而不是对象的好处是性能更高

 

字符串 NSString

创建字符串

 

NSString *height;
height=[NSString stringWithFormat: @"Your height is %d feet",5];

 

类方法

我们所创建的大部分方法是实例方法 用前导减号 - 声明

如果方法用于实现常规功能,用前导加好 + 来声明类方法

就如NSString的stringWithFormat方法

 

+ (id) stringWithFormat: (NSString *) format, ...;

 

关于大小

 

- (unsigned int) length;

 

使用方式

 

unsigned int length=[height length];

 

该方法可以正确处理国际字符串

比较

 

isEqualToString
- (BOOL) isEqualToString: (NSString *) aString;

 

使用方式

 

NSString *thing1=@"hello 5";
NSString *thing2;
thing2=[NSString stringWithFormat: @"hello %d",5];
if(thing1 isEqualToString: thing2]){
	NSLog(@"They are the same!");
}

 

同样的compare方法

 

- (NSCompar isonResult) compare: (NSString *) string;

 

返回一个NSComparisonResult枚举类型

type enum _NSComparisonResult{
	NSOrderedAscending=-1,
	NSOrderedSame,
	NSOrderedDescending
}NSComparisonResult;

如果返回NSOrderedAscending 表示左侧小于右侧 其他类似

不区分大小写的比较

- (NSComparisonResult) compare: (NSString *) string
						options: (unsigned) mask;

options参数是一个掩码

NSCaseInsensitiveSearch 不区分大小写

NSLiteralSearch 完全比较,区分大小写

NSNumericSearch 比较字符个数而不是字符值 比如100应该排在99以后

if([thing1 compare: thing2
		options: NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame){
			NSLog(@"They match");
		}

判断字符串内是否包含其他字符串

- (BOOL) hasPrefix: (NSString *) aString;
- (BOOL) hasSuffix: (NSString *) aString;

分别检查以特定字符串开头和结尾

- (NSRange) rangeOfString: (NSString *) aString;

返回匹配的位置,如果找不到 则range.start=NSNotFound

 

可变性

NSString是不可变的

NSMutableString是可变字符串

两者间比较类似Java中的String和StringBuffer

创建NSMutableString的方法

+ (id) stringWithCapacity: (unsigned) capacity;

该容量只是一个建议 

NSMutableString *string;
string = [NSMutableString stringWithCapacity: 42];

可以使用一些方法操作该string

- (void) appendString: (NSString *) aString;
- (void) appendFormat: (NSString *) format, ...;

使用起来非常方便 也很显而易见

NSMutableString *string;
string=[NSMutableString stringWithCapacity: 50];
[string appendString: @"Hello here"];
[string appendFormat: @"human %d!",39];
//得到最后结果Hello here human 39!

类似的

删除字符串中的字符

- (void) deleteCharactersInRange: (NSRange) range;

NSMutableString是NSString的子类,所以可以使用NSString的所有功能

因此同样可以使用stringWithFormat来创建NSMutableString

 

集合家族 NSArray NSDictionary等

NSArray可以放入任意类型的对象

两个限制

1 只能存储Objective-C对象,而不能是C基础类型int,float,enum,struct等

2 不能存储零值nil NULL值

可以通过类方法arrayWithObjects创建,以逗号分割对象列表,并最后以nil表示列表结束

NSArray *array;
array=[NSArray arrayWithObjects: @"one",@"two",@"three",nil];

获得对象个数

- (unsigned) count;

取得特定索引处对象

- (id) objectAtIndex: (unsigned int) index;

例如遍历一个数组

int i;
for(i=0;i<[array count];i++){
	NSLog(@"index %d has %@",i,[array objectAtIndex: i]);
}

字符串切分成数组

-componentsSeparatedByString

数组合并成字符串

-componentsJoinedByString

可变数组

NSArray是不可变的,类似的NSMutableArray可变

创建新的可变数组

+ (id) arrayWithCapacity: (unsigned) numItems;

数组末尾添加对象

- (void) addObject: (id) anObject;

删除特定位置对象

- (void) removeObjectAtIndex: (unsigned) index;

枚举 NSEnumerator

通过objectEnumerator向数组请求枚举器

- (NSEnumerator *) objectEnumerator; 

 这似乎类似于Java的迭代器Iterator

使用

NSEnumerator *enumerator;
enumerator=[array objectEnumerator];

可以从后向前浏览集合 reverseObjectEnumerator

请求下一个对象

- (id) nextObject;

返回nil时表示结束

快速枚举

for(NSString *string in array){
	NSLog(@"I found %@",string);
}
 

NSDictionary 有些类似于Map(散列表,关联数组)

类似的NSDictionary不可变,可变的NSMutableDictionary

创建字典的方法

+ (id) dictionaryWithObjectsAndKeys: (id) firstObject, ...;

例如

Tire *t1=[Tire new];
Tire *t2=[Tire new];
Tire *t3=[Tire new];
Tire *t4=[Tire new];

NSDictionary *tires;

tires=[NSDictionary dictionaryWithObjectsAndKeys: t1, @"front=left", t2, @"front-right", t3, @"back-left", t4, @"back-right", nil];

使用objectForKey来获取值

- (id) objectForKey: (id) aKey;

例如查找右后轮胎

Tire *tire=[tires objectForKey: @"back-right"];

同样的,对于可变的字典

+ (id) dictionaryWithCapacity: (unsigned int) numItems;

为可变字典添加元素

- (void) setObject: (id) anObject forKey: (id) aKey;

如果当前已有值,则新值会替代原有的值

删除

- (void) removeObjectForKey: (id) aKey;

使用但不扩展

不要自己去创建NSString,NSArray,NSDictionary的子类

 

各种数值

就和Java中对int,float等有Integer,Float等对象封装,Objectvie-C也提供了NSNumber的包装类

+ (NSNumber *) numberWithChar: (char) value;
+ (NSNumber *) numberWithInt: (int) value;
+ (NSNumber *) numberWithFloat: (float) value;
+ (NSNumber *) numberWithBool: (BOOL) value;

类似的还有long,long long等

例如将一个包装后的数据放入数组

NSNumber *number;
number=[NSNumber numberWithInt: 42];
[array addObject: number];
[dictionary setObject: num forKey: @"Bork"];

从包装类获取值

- (char) charValue;
- (int) intValue;
- (NSString *) stringValue;

 等

 

NSValue

NSNumber是NSValue的子类,NSValue可以包装任意值

+ (NSValue *) valuseWithBytes: (const void *) value
	objCType: (const char *) type;

例如,将NSRect放入NSArray

NSRect rect=NSMakeRect(1,2,3,4);

NSValue *value;
value=[NSValue valueWithBytes: &rect
	objCType: @encode(NSRect)];
[array addObject: value];

这里使用@encode编译器指令,它可以接受数据类型的名称并转化为合适的字符串

使用getValue取值

- (void) getValue: (void *) value;

传递的是存储该数值的变量地址

value=[array objectAtIndex: 0];
[value getValue: &rect];

Cocoa提供了常用的将struct型数据转换成NSValue的方法

+ (NSValue *) valueWithPoint: (NSPoint) point;
+ (NSValue *) valueWithSize: (NSSize) size;
+ (NSValue *) valueWithRect: (NSRect) rect;
 

- (NSPoint) pointValue;
- (NSSize) sizeValue;
- (NSRect) rectValue;

例如,在NSArray中存储和检索NSRect

value=[NSValue valueWithRect: rect];
[array addObject: value];
...
NSRect anotherRect=[value rectValue];
 

NSNull

之前提到nil在NSArray和NSDictionary中有特殊的含义,所以不能把nil放入其中,如果要真的表示没有,Objectvie-C提供了NSNull

使用[NSNull null]==来比较是否为空

 

分享到:
评论

相关推荐

    Objective-C基础教程第二版

    ### Objective-C基础教程第二版:OC入门基础教程 #### 一、Objective-C简介与环境搭建 **Objective-C**是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能,并且是开发iOS应用的主要语言之一。尽管...

    objective-c学习笔记

    总的来说,“Objective-C学习笔记”应该覆盖了从基础语法到实际应用的全方位教程,适合初学者系统学习Objective-C,并通过实践加深理解。通过深入学习,开发者可以掌握开发苹果平台应用程序所需的关键技能。

    Object-C语言教程0220.zip基础知识及相关案例

    《Objective-C语言教程0220.zip》是一个包含Objective-C编程基础及实例的课程资源包。这个压缩包中,我们能够找到一系列与学习Objective-C语言相关的材料,包括图像和文本文件,旨在帮助初学者理解并掌握这门强大的...

    Mac编程入门资料(Objective-C)

    Objective-C是一种基于C语言的面向对象编程语言,主要应用于Apple的macOS和iOS操作系统。它是开发Mac应用程序的基础,对于想要进入苹果平台开发的程序员来说,学习Objective-C是必不可少的步骤。本资源包为初学者...

    Object-C语言教程0220.zip

    Objective-C(简称Obj-C或Objective-C)是苹果公司基于C语言构建的一种面向对象的编程语言,广泛应用于iOS和Mac OS X操作系统。本教程将深入探讨Object-C的基础概念、语法特性以及实际开发中的应用,旨在帮助初学者...

    笔记_Objective_c基础教程.pdf

    笔记_Objective_c基础教程

    Objective-C-Learning

    - **基础教程**:介绍Objective-C的基本语法和概念。 - **实例代码**:展示如何创建类、对象、进行消息传递等。 - **项目实践**:可能包含简单的iOS或macOS应用开发项目,帮助你将理论知识应用到实际。 - **进阶话题...

    iOS开发教程(大神原创笔记)副本.pdf

    3. **Objective-C语言基础** - OC概述 - OC程序入口 - 字符串处理 - 输出方式 - 类的定义与使用 4. **面向对象编程在Objective-C中的实践** ### 1. iOS开发环境搭建 为了进行iOS应用开发,首先需要搭建合适的...

    iOS开发教程(大神笔记)

    3. Objective-C编程语言概述:Objective-C是在C语言基础上增加面向对象语法的语言。OC代码中可以混入C语言代码,文件后缀名为.m,支持C++代码的引入,后缀名改为.mm。OC的关键字以@开头,字符串也以@开头,使用NSLog...

    iOS开发教程(大神原创笔记)

    ### iOS开发教程(大神原创笔记)核心知识点详解 #### 一、Unix相关知识点 **1. Unix指令:** - **pwd**:用于显示当前所在目录的位置。 - **ls**:列出当前目录下的所有文件及文件夹。 - **ls –l**:以详细...

    51CTO下载-62个IOS免豆资料(下载地址目录).pdf

    基础教程(如`Objective-C_2.0基础教程`和`Objective-C 基础教程【随书源码】`)帮助初学者理解语法、类、对象以及消息传递机制。 - 高级教程(如`Objective-C 高级教程`)则深入到内存管理、类别、协议等高级特性...

    iPhone开发基础教程_学习笔记

    本教程主要聚焦于iPhone开发的基础知识,包括Object-C语言、界面设计和UIViewController的使用。 Object-C是iOS开发的主要编程语言,它基于C语言并添加了Smalltalk的面向对象特性。对于初学者来说,《Learn Object-...

    Iphone开发资料整理

    这组资料主要涵盖了iPhone应用开发的基础知识,包括Cocoa框架的基本原理、Dashcode的使用指南以及Objective-C的入门教程。这些文档旨在帮助开发者理解并掌握iPhone应用开发的核心技术和工具。 【描述】: 1. ...

    MyNotes:iOS学习笔记

    本资源"我的笔记:iOS学习笔记"似乎是一个开发者分享的个人学习资料,其中可能涵盖了Objective-C的基础知识、iOS应用开发实践以及对一些第三方控件的分析和使用。 首先,Objective-C作为iOS开发的基础,其语法特性...

    iPhone 开发基础教程

    ### iPhone开发基础教程知识点概述 #### 一、开发前的准备 - **硬件需求**:首先,需要确保拥有一台运行OS X Leopard (10.5.3或更高版本)的基于Intel的Macintosh计算机。这包括2006年后发布的任何Macintosh计算机,...

    iOS开发基础教程全书ppt课件汇总(完整版).pptx

    Objective-C是早期iOS开发的主要语言,它基于C语言,加入了Smalltalk的面向对象特性。随着Swift的发布,苹果推荐开发者转向这种更现代、安全、高效的编程语言。Swift语法简洁,易于阅读,且支持类型推断和闭包,大大...

    《iOS开发标准教程》读书笔记模板.pptx

    第一篇基础篇,主要介绍 iOS 9 开发概述、iOS 9 的开发工具 Xcode 7、Objective-C 语言基础、Cocoa 基础等内容,旨在帮助读者建立起 iOS 9 技术的思想框架,并且对 iOS 9 开发的过程有一个初步的了解。 第二篇界面...

    IOS开发入门

    资料中包含的"Objective-C_2.0 基础教程"和"Objective-C 高级教程"是学习Objective-C的好起点。同时,"Cocoa基本原理指南"深入介绍了Cocoa Touch框架,这是构建iOS用户界面的关键。 其次,"iPhone开发笔记实录(代码...

Global site tag (gtag.js) - Google Analytics