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
分享到:
相关推荐
Objective-c学习笔记 Objective-c学习笔记
Objective-C程序设计 ,Objective-C中常用类的常用方法总结截图
Objective-c、UIKit自学笔记
Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。
这篇笔记主要介绍了Objective-C的一些基础知识,包括以下几个方面: 1. Objective-C概述,介绍了Objective-C的来源、发展历史和作为面向对象的C语言的特点。 2. 第一个OC程序,讲解了如何创建一个OC项目,解释了一些OC...
非常全面的Objective-c的学习教程,里面包含了很多程序员的学习笔记有图文解说,还有语法解说,还有使用函数以及如何创建,不管你是新手还是高手都是你Objective-c开发的好工具好帮手,里面还包含了学习网站的教学...
Objective-C 学习笔记 IOS软件开发
苹果的iPhone和iPad应用开发都指定使用同一开发语言:Objective-C语言。这是一种简单的面向对象编程语言,它的基础是C程序设计语言。Objective-C不仅功能强大,而且简单易学。Objective-C已经成为苹果系统下应用程序...
Objective-C是一种简单的...Objective-C通过提供类定义,方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最早的面向对象编程语言之一。
是个人iOS开发初期对数组操作所做的笔记整理,包含了大部分NSArray和NSMutableArray操作方法
涵盖了objetive-c语言的所有基本知识,变量、函数、打印、屏幕输入,教程内附完整笔记源码
Objective-C学习资料(内置学习笔记,各内容源码) 是我近学习2个月并整理的东西,对于初学者有一定的帮助
Objective C 学习笔记
#Swift学习: 从Objective-C到Swift 这篇文章是自己学习Swift的笔记与深化。希望这篇文章能够帮助已经有Objective-C经验的开发者更快地学习Swift。同时也品味到Swift的精妙之处。 结论放在开头: 我认为Swift比...
学习心得,对oc的简要讲解,图形解析,清晰明了。
Objective-C个人学习笔记
笔者精心总结的,希望给读者帮助,很好的文档,初学者的良师益友
这是Objective-C程序设计(第4版)pdf版的,里面有我自己看过后做的笔记之类的,希望在大家阅读感到不清楚的时候能够提供大家一些帮助。
个人学习objective-c和xcode helloworld 笔记,比较了objective-c 和C++ JAVA的一些区别
Objective-C过去一直以来都是iOS应用程序开发的主要支持语言,虽然现在有了Swift,但需要调用的很多现有类库还是Objective-C写成的,值得学习,下面一起来看一下这份粗浅的Objective-C的入门学习笔记: