`
qzww5324
  • 浏览: 38097 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

objective-C笔记(六)

阅读更多

1.两种常用的结构体:

    范围:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

 用来表示字符串中字符的位置和数组中的元素范围。

 location表示存放该范围的起始位置。

 length表示该范围内的所含元素的个数。

 

例:在字符串"objective-C is a cool language"中,要表示cool的范围,可以用三种形式表示

NSRange *range1;
range1.location=17;
range1.length=4;

NSRange *range2={17,4};
	
NSRange *range3=NSMakeRange(17, 4);

 

 几何数据类型:

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

typedef struct _NSSize {
    CGFloat width;		/* should never be negative */
    CGFloat height;		/* should never be negative */
} NSSize;

 NSPoint 表示笛卡儿平面中的一个点(x,y);NSSize 用来存储长度和宽度。

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

 NSRect表示一个矩形数据类型,由点和大小复合而成;

 创建这些结构同样可以使用函数 :NSMakePoint(),NSMakeSize(),NSMakeRect;

 

*考虑到性能的原因,objective-c中的对象都是动态分配,创建对象会造成比较大的系统开销,所以采用struct的形式而不用对象。

 

2.字符串

(1)

 

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

可以使用NSString 的类方法stringWithFormat来创建字符串。

类方法的表示:

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

 最前面的"+"表示了该方法为类方法,以此来和实例方法的"-" 区分;

 

(2)

 

unsigned int length=[height length];

 length 方法用来获取NSString的长度

 

*length方法可以正确的获取国际字符串的字符数

 

(3)

 

NSString* str1=@"wo kao 110";
NSString* str2=[NSString stringWithFormat:@"wo kao %d",1101];
if([str1 isEqualToString:str2]){
	NSLog(@"there is equals");
}
 

isEqualToString函数可以比较两个NSString字符串是否相同。结果返回一个BOOL值;

 

要逐个比较字符,可以使用 compare函数

- (NSComparisonResult)compare:(NSString *)string;

 它的返回值NSComparisonResult是一个enum类型

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

 NSOrderedAscending表示左侧数值小于右侧;

 NSOrderedDescending表示右侧数值小于左侧;

 NSOrderedSame 则相等;

 

该方法的比较是区分大小写的,要不区分大小写比较需要使用方法:

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

 options是个掩码,可以进行位运算,options的选项:

 

NSCaseInsensitiveSearch:不区分大小写;

NSLiteralSearch:完全比较,区分大小写;

NSNumericSearch: 比较字符串的个数;

....

 

(4)

  字符串包含:

 

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

 判断字符串是否以某个字符串开头;

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

 判断字符串是否以某个字符串结尾;

 

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

 查找某字符串中包含的一串字符串的位置,如果不存在nsrange的start值为NSNotFound

 

(5)

  可变字符串NSMutableString

  创建一个可变字符串前,需要分配一个容量,该容量并不能影响字符串的大小,这个容量仅仅是个最优值,按照这个容量,可以预分配一块内存来存储,以提高后续操作的速度。

NSMutableString *string=[NSMutableString stringWithCapacity:42];

 

 要达到动态改变字符串的目的,可以采用以下的方法:

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

 参数形式和普通字符串操作函数的参数类似;

 

要删除某个字符串,可以先取得要删除字符串的range,然后调用对应的delete方法即可

- (void)deleteCharactersInRange:(NSRange)range;

 

下面是可变字符串的一个例子:

//定义一个可变长的字符串
NSMutableString *string=[NSMutableString stringWithCapacity:42];
//再末尾添加一个字符串
[string appendString:@"James BethLynn Jack Evan"];
//查找‘jack’在字符串中的位置
NSRange range=[string rangeOfString:@"jack"];
//删除该串
[string deleteCharactersInRange:range];

 结果:

 

James BethLynn  Evan

 

3.数组

(1)NSArray:以下定义了一个NSArray数组

NSArray *array=[NSArray arrayWithObject:@"a",@"b",nil];

 如同java中的集合类一样,NSArray中可以存储任何对象,但是不能存储c中的基本数据类型。数组的定义以nil(对象的零值或null值)作为结尾,nil代表了列表结束,所以换句话就是array中不能存储nil。

通过方法

 

[array count];

 来获取对象的个数,通过方法:

[array objectAtIndex:index];

 来确定某一索引处的对象。

	NSString *string=@"one:two:three:four";
	NSArray *result=[string componentsSeparatedByString:@":"];
	string=[result componentsJoinedByString:@"_"];

通过特定的方法可以实现字符串与数组之间的转换,有些类似java中集合对象可以通过toArray方法转换.

 

(2)可变数组NSMutableArray

和可变字符串类似,需要分配一个容量

+ (id)arrayWithCapacity:(NSUInteger)numItems;

 增加对象的方法通过

 

- (void)addObject:(id)anObject;

 来实现。

删除对象时:

- (void)removeObjectAtIndex:(NSUInteger)index;

需要提供要删除对象的索引。

 

(3)枚举

要循环一个NSArray对象,可以通过NSEnumerator来完成迭代

如:

	NSEnumerator *enumerator=[array objectEnumerator];
	id thingie;
	while(thingie=[enumerator nextObject]){
		NSLog(@"i found %@",thingie);
	}

 通过获得一个array对象的enumerator来遍历获得数组中的单个对象。while循环中,只要不等于nil,就会一直循环直至thingie的值为nil;

 

另一种实现方式类似与java 1.5中的for each:

 

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

 

(4)NSDictionary:结构类似于java中map,以键值对的形式定义集合。如下,创建了一个NSDictionary类型的轮子的集合

        Tire *t1=[Tire new];
	Tire *t2=[Tire new];
	Tire *t3=[Tire new];
	Tire *t4=[Tire new];
	
	NSDictionary *tires=[NSDictionary dictionaryWithObjectsAndKeys:t1,@"front-left",t2,@"front-right",t3,@"back-left",t4,@"back-right"];
	
	Tire *tire=[tires objectForKey:@"front-left"];

 通过objectForKey方法传入一个key,就可以获得对应的对象。

 

NSDictionary 是不可变的,如果要能动态增删集合元素,可以使用 NSMutableDictionary,以前面定义的4个轮子为例,同样的可以创建一个可变轮子的NSMutableDictionary集合:

	NSMutableDictionary *tires=[NSMutableDictionary dictionary];
	
	[tires setObject:t1 forKey:@"front-left"];
	[tires setObject:t2 forKey:@"front-right"];
	[tires setObject:t3 forKey:@"back-left"];
	[tires setObject:t4 forKey:@"back-left"];
	
	[tires removeObjectForKey:@"back-left"];

 通过setObject方法可以动态的添加元素到集合中,也可以通过对应的删除方法 removeObjectForKey删除元素。

 如果添加相同的key,如:

 

[tires setObject:t1 forKey:@"big-front-left"];

就会覆盖原先的值。

 

4.

 (1)NSNumber类可以包装基本类型,这样,就可以在NSArray中存储。

 char对应的包装方法是 numberWithChar;

 int 对应的包装方法是 numberWithInt;

 float 对应的包装方法是 numberWithFloat;

 bool对应的包装方法是 numberWithBool;

这个功能如同java中的装箱,但是在objective-c中并不支持自动装箱;

 

要从已经被NSNumber封装中取出基本类型,用以下对应的方法即可:

charValue,intValue,floatValue,boolValue 同样的,还有stringValue可以取到NSString对象。

 

(2)NSValue

可以包装任何任何对象,以下为包装一个结构类型的示例:

	NSRect rect=NSMakeRect(1, 2, 30, 40);
	
	NSValue *value=[NSValue valueWithBytes:&rect objCType:@encode(NSRect)];
	
	[array addObject:value];
	//使用getValue:来提取数值,需要要存储这个数值变量的地址做为参数
	value=[array objectAtIndex:0];
	[value getValue:&rect];
 

 

(3)NSNull:

 通过null方法包装后,可以在NSArray等中插入nil

 

 

 

 

 

 

 

分享到:
评论
1 楼 ahopedog2 2012-02-22  
NSRange *range1; 


应该写成NSRange range1; 

相关推荐

    Objective-C&UIKit自学笔记

    以上就是Objective-C和UIKit自学笔记中涉及的一些核心概念和基础知识。在深入学习时,还需要了解如何使用UIKit创建视图、控制器、事件处理等,以及更高级的主题,如内存管理策略ARC(Automatic Reference Counting)...

    Objective-c学习笔记

    Objective-C是一种基于C语言的面向对象编程语言,它是苹果公司Mac OS X和iOS操作系统的主要开发语言。Objective-C的特性使其成为构建Cocoa框架应用程序的理想选择。以下是对Objective-C关键概念的详细解释: 1. **...

    objective-c学习笔记

    这篇“Objective-C学习笔记”旨在帮助初学者理解并掌握这种强大的编程工具。 一、Objective-C基础 1. 类与对象:Objective-C中的所有操作都是基于类的,类是对象的模板,而对象是类的实例。理解类和对象的概念是...

    Effective Objective-C 2.0 学习笔记目录

    Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。

    Objective-C 基础语法学习项目

    根据给定的学习笔记,我们将从以下几个方面深入探讨Objective-C的基础语法: 1. **基本概念介绍**:包括类、对象、方法等基本概念。 2. **Objective-C核心类型**:如`NSString`、`NSArray`、`NSDictionary`。 3. **...

    objective-c编程入门学习笔记

    Objective-C中的打印输出主要通过`NSLog`函数完成,其用法类似于C语言的`printf`函数,但是使用`@`符号作为字符串的前缀。 ```objective-c NSLog(@"Hello, World!"); ``` ##### 2. 变量与运算 Objective-C支持多种...

    Objective-C 学习笔记

    总的来说,Objective-C作为iOS开发的重要语言,其面向对象的特性、与C语言的兼容性以及强大的Cocoa框架,使得开发者能够构建功能丰富的iOS应用程序。学习Objective-C的基础知识和面向对象编程概念对于理解iOS开发至...

    Objective-C学习资料(内置学习笔记,各内容源码)

    Objective-C是在C语言基础上扩展的,引入了Smalltalk式的消息传递机制,使得它能够支持面向对象编程。它的语法中,类、对象、方法和协议等概念是核心元素。 1. **类与对象**:Objective-C中的所有数据都是通过对象...

    Objective-C学习笔记(一)OC基础.md

    这篇笔记主要介绍了Objective-C的一些基础知识,包括以下几个方面: 1. Objective-C概述,介绍了Objective-C的来源、发展历史和作为面向对象的C语言的特点。 2. 第一个OC程序,讲解了如何创建一个OC项目,解释了一些OC...

    Objective-c学习资料集合

    非常全面的Objective-c的学习教程,里面包含了很多程序员的学习笔记有图文解说,还有语法解说,还有使用函数以及如何创建,不管你是新手还是高手都是你Objective-c开发的好工具好帮手,里面还包含了学习网站的教学...

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

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

    objective-c的总结

    Objective-C是在C语言基础上扩展的,因此它保留了C语言的所有特性,如变量、函数、控制结构等。它的主要扩展是增加了消息传递机制和类的概念,这使得它成为一种面向对象的语言。消息传递是Objective-C的核心,通过向...

    objective c学习笔记和示例

    苹果的iPhone和iPad应用开发都指定使用同一开发语言:Objective-C语言。这是一种简单的面向对象编程语言,它的基础是C程序设计语言。Objective-C不仅功能强大,而且简单易学。Objective-C已经成为苹果系统下应用程序...

    简单的 Objective-C 示例代码,实现了一个简单的计算器程序

    Objective-C 是一种面向对象的编程语言,主要应用于苹果的 macOS 和 iOS 开发。在这个"简单的 Objective-C 示例代码"中,我们很可能看到一个基础的计算器程序的实现,这为我们提供了一个了解 Objective-C 基础语法和...

    objective c学习笔记

    Objective-C是一种简单的...Objective-C通过提供类定义,方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最早的面向对象编程语言之一。

    Objective-C基础教程第二版

    **Objective-C**是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能,并且是开发iOS应用的主要语言之一。尽管Swift已经成为苹果官方推荐的新一代编程语言,但Objective-C仍然拥有大量的代码库和丰富...

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

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

    Objective-C

    Objective-C是在C语言的基础上扩展的,增加了Smalltalk式的面向对象特性,使得它在编写复杂应用程序时具有更高的灵活性和可扩展性。 Objective-C的核心概念主要包括类、对象、消息传递和协议。以下是对这些概念的...

Global site tag (gtag.js) - Google Analytics