Objective-C有没有标准方法随机化nsarray 添加

/*---------------------------创建数组------------------------------*/
//NSArray *array = [NSArray alloc] initWithObjects:
@"One",@"Two",@"Three",@"Four",nil];
self.dataArray =
[array release];
//- (unsigned) C数组所包含对象个数;
NSLog(@"self.dataArray cound:%d",[self.dataArray count]);
//- (id) objectAtIndex: (unsigned int)获取指定索引处的对象;
NSLog(@"self.dataArray cound 2:%@",[self.dataArray objectAtIndex:2]);
/*--------------------------从一个数组拷贝数据到另一数组(可变数级)----------------------------*/
//arrayWithArray:
//NSArray *array1 = [NSArray alloc] init];
NSMutableArray *MutableArray = [NSMutableArray alloc] init];
NSArray *array = [NSArray arrayWithObjects:
@"a",@"b",@"c",nil];
NSLog(@"array:%@",array);
MutableArray = [NSMutableArray arrayWithArray:array];
NSLog(@"MutableArray:%@",MutableArray);
array1 = [NSArray arrayWithArray:array];
NSLog(@"array1:%@",array1);
NSMutableArray *newArray = [NSMutableArray alloc] init];
NSArray *oldArray = [NSArray arrayWithObjects:
@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];
NSLog(@"oldArray:%@",oldArray);
for(int i = 0; i & [oldArray count]; i++)
obj = [oldArray objectAtIndex:i] copy];
[newArray addObject: obj];
NSLog(@"newArray:%@", newArray);
[newArray release];
//快速枚举
//NSMutableArray *newArray = [NSMutableArray alloc] init];
NSArray *oldArray = [NSArray arrayWithObjects:
@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];
NSLog(@"oldArray:%@",oldArray);
for(id obj in oldArray)
[newArray addObject: obj];
NSLog(@"newArray:%@", newArray);
[newArray release];
//Deep copy
//NSMutableArray *newArray = [NSMutableArray alloc] init];
NSArray *oldArray = [NSArray arrayWithObjects:
@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];
NSLog(@"oldArray:%@",oldArray);
newArray = (NSMutableArray*)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFPropertyListRef)oldArray, kCFPropertyListMutableContainers);
NSLog(@"newArray:%@", newArray);
[newArray release];
//Copy and sort
//NSMutableArray *newArray = [NSMutableArray alloc] init];
NSArray *oldArray = [NSArray arrayWithObjects:
@"b",@"a",@"e",@"d",@"c",@"f",@"h",@"g",nil];
NSLog(@"oldArray:%@",oldArray);
NSEnumerator *
enumerator = [oldArray objectEnumerator];
while(obj = [enumerator nextObject])
[newArray addObject: obj];
[newArray sortUsingSelector:@selector(compare:)];
NSLog(@"newArray:%@", newArray);
[newArray release];
/*---------------------------切分数组------------------------------*/
//从字符串分割到数组- componentsSeparatedByString:
NSString *string = [NSString alloc] initWithString:@"One,Two,Three,Four"];
NSLog(@"string:%@",string);
NSArray *array = [string componentsSeparatedByString:@","];
NSLog(@"array:%@",array);
[string release];
//从数组合并元素到字符串- componentsJoinedByString:
NSArray *array = [NSArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four",nil];
NSString *string = [array componentsJoinedByString:@","];
NSLog(@"string:%@",string);
/*******************************************************************************************
NSMutableArray
*******************************************************************************************/
/*---------------给数组分配容量----------------*/
//NSArray *
array = [NSMutableArray arrayWithCapacity:20];
/*--------------在数组末尾添加对象----------------*/
//- (void) addObject: (id) anO
//NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"One",@"Two",@"Three",nil];
[array addObject:@"Four"];
NSLog(@"array:%@",array);
/*--------------删除数组中指定索引处对象----------------*/
//-(void) removeObjectAtIndex: (unsigned)
//NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"One",@"Two",@"Three",nil];
[array removeObjectAtIndex:1];
NSLog(@"array:%@",array);
/*-------------数组枚举---------------*/
//- (NSEnumerator *)objectE从前向后
//NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"One",@"Two",@"Three",nil];
NSEnumerator *
enumerator = [array objectEnumerator];
while (thingie = [enumerator nextObject]) {
NSLog(@"thingie:%@",thingie);
//- (NSEnumerator *)reverseObjectE从后向前
//NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"One",@"Two",@"Three",nil];
NSEnumerator *
enumerator = [array reverseObjectEnumerator];
id object;
while (object = [enumerator nextObject]) {
NSLog(@"object:%@",object);
//快速枚举
//NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"One",@"Two",@"Three",nil];
for(NSString *string in array)
NSLog(@"string:%@",string);
/*******************************************************************************************
NSDictionary
*******************************************************************************************/
/*------------------------------------创建字典------------------------------------*/
//- (id) initWithObjectsAndK
//NSDictionary *dictionary = [NSDictionary alloc] initWithObjectsAndKeys:@"One",@"1",@"Two",@"2",@"Three",@"3",nil];
NSString *string = [dictionary objectForKey:@"One"];
NSLog(@"string:%@",string);
NSLog(@"dictionary:%@",dictionary);
[dictionary release];
/*******************************************************************************************
NSMutableDictionary
*******************************************************************************************/
/*------------------------------------创建可变字典------------------------------------*/
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
//添加字典
[dictionary setObject:@"One" forKey:@"1"];
[dictionary setObject:@"Two" forKey:@"2"];
[dictionary setObject:@"Three" forKey:@"3"];
[dictionary setObject:@"Four" forKey:@"4"];
NSLog(@"dictionary:%@",dictionary);
//删除指定的字典
[dictionary removeObjectForKey:@"3"];
NSLog(@"dictionary:%@",dictionary);
/*******************************************************************************************
NSValue(对任何对象进行包装)
*******************************************************************************************/
/*--------------------------------将NSRect放入NSArray中------------------------------------*/
//将NSRect放入NSArray中
NSMutableArray *array = [NSMutableArray alloc] init];
CGRect rect = CGRectMake(0, 0, 320, 480);
value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)];
[array addObject:value];
NSLog(@"array:%@",array);
//从Array中提取
value = [array objectAtIndex:0];
[value getValue:&rect];
NSLog(@"value:%@",value);
/*******************************************************************************************
从目录搜索扩展名为jpg的文件
*******************************************************************************************/
//NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *
home = @"../Users/";
NSDirectoryEnumerator *
direnum = [fileManager enumeratorAtPath: home];
NSMutableArray *files = [NSMutableArray alloc] init];
NSString *
while (filename = [direnum nextObject]) {
if([filename pathExtension] hasSuffix:@"jpg"]){
[files addObject:filename];
//快速枚举
//for(NSString *filename in direnum)
if([filename pathExtension] isEqualToString:@"jpg"]){
[files addObject:filename];
NSLog(@"files:%@",files);
NSEnumerator *
filenum = [files objectEnumerator];
while (filename = [filenum nextObject]) {
NSLog(@"filename:%@",filename);
//快速枚举
//for(id object in files)
NSLog(@"object:%@",object);
//} 文章来自:.cn/s/blog_4adf31ea0100nlnp.html
阅读(...) 评论()与C语言相比要注意的地方
objective-c高级特性
开发工具介绍(cocoa&工具包的功能,框架,源文件组织;XCode使用介绍)
1.&&&&&&&objective-c是C语言的一个扩展集,主要由APPLE公司维护,是MAC系统下的主要开发语言。
个人认为,对于用惯了常用的C,JAVA等语言的人来说,objective-c是一中很另类,非主流的语言。
2.&&&&开发&Mac的&UI&程序来说,使用的是&Cocoa&这个框架,cocoa的组成部分有:foundation和application kit框架。
【foundation框架处理用户界面之下的特性,如数据结构和通信机制;application kit框架包含cocoa的高级特性:用户界面元素,打印,颜色,声音管理,applescript等】
3.&&&&&&&我通过这本书的学习:
基本掌握了Objective C的语法,基本能看懂别人写的代码,自己也能编写代码;
熟悉了开发环境XCode的使用;(包括建立项目,调试,运行,代码管理等)
与C语言相比要注意的地方:
1.&&&&&&&文件介绍:Objective-C&也使用头文件(header files),后缀为&.h,&但使用&.m(即&message,&其他面向对象编程语言也叫&method),作为源文件的后缀。
在objective-c中使用#import&&,而不使用#include&&,#import可以保证头文件只被包含一次。
2.&&&&&&&与C一致的地方:
数据类型,表达式,各种运算符
循环:for, while, do while, break, continue
分支:if, else, switch
3.&&&&NSlog()函数:与printf()类似,想控制台输出信息。但它增加了一些特性,如时间戳等。
【cocoa对起所有的函数,常量和类型名称都添加了NS前缀。】
4.&&&&&&&双引号的前面的@表示这双引号中的字符串应该作为cocoa的NSString元素来处理。
5.&&&&&&&布尔类型BOOL:值为YES,NO;
6.&&&&%d表示输出整数
&&%@表示输出NSString类型
%s表示输出字符串数组(char*);
7.&&&&objective-c中的方括号:
1.&&&&&&&用于通知某个对象该做什么。
2.&&&&&&&方括号内第一项是对象,其余部分是你需要对象执行的操作。
3.&&&&&&&在objective-c中通知对象执行某种操作,称为发送消息。(也叫调用方法)
8.&标识符id:是一种泛型,用于表示任何种类的对象。
9.&类声明@interface:
@interface Circle:NSObject&& //为Circle类定义接口;NSObject表示是父类。
{//以下是数据成员
&& ShapeColor fillC
//以下是方法声明
-(void) setFillColor: (ShapeColor) fillC& //前面的短线表明这是方法声明
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //短线后面是方法的返回类型
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //接着是方法名
//冒号后面是参数,其中(ShapeColor)是参数类型,
fillColor是参数名
-(void) setBounds:(ShapeRect)
&//减号就是普通函数
加号就是静态函数
@end&&&& //结束声明
objective-c看到@符号,就把它看成是C语言的扩展。
一个类的完整声明如下:
&&&&@interface CClassA(Category): CBaseClass&IA,IB...&
//类名(类别名):父类&协议&
10.&类实现@implementation
@implementation
@implementation Circle
-(void) setFillColor: (ShapeColor) c
&& fillColor=c;
-(void) draw
&&& NSLog(@&drawing a circle at(%d %d %d %d) in %@&, bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillName));
隐藏对象self对应于C中的this。
Self-&fillcolor来访问成员变量。
11.&调用写好的类和类函数:
//创建新对象,使用缺省初始化函数
&&&&Bank *bankDefault = [[Bank alloc] init];
//调用方法:
&&&&[bank addAmount: 1];
[bank print];
//&释放对象:
&&&&[bankDefault free];
两个参数的方法:
-(void) setTire: (Tire *) tire& //声明
&&&&& atIndex: (int)
[car setTire:tire&atIndex:2];
objective-c高级特性:
1.&&&&&&&继承
Objective-c不支持多继承。
Super&关键字:调用该类的父类;
超类:父类的另一种说法。&
2.&&&&&&&&
自定义NSLog()输出:
在类中添加description方法就可以自定义NSLog()如何输出对象。
@implementation Tire
-(NSString *) description
&& Return (@&I am a tire.&);
&&& NSLog(@&%@&,tire[0]);
3.&&&&&&&&
Foundation kit:
Cocoa是由两部分框架组成的:foundation kit [包括一些基础类]和&application kit.【包括用户接口对象和高级类】
&创建字符串:
NSString *
test=[NSString stringWithFormat:@"i'm %d years old!",23];
若在声明方法时在方法前面添加了加号,那就表示把这个方法定义为类方法【这个方法属于类对象,而不是类的实例对象。】
NSArray类:可以存放任意类型的对象.
它有两个限制:
1.&它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。
2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】&
创建NSArray:
array=[NSArray arrayWithObjects:@"one",@"two",nil];&&&&&&&&
NSString, NSMutableString类;
【NSString是不可变的,即一旦创建完成,就不能通过删除字符或添加字符的方式来改变它;
而NSMutableString是可变的。
这两个类就像JAVA中的string与stringBuffer类的区别。】
NSArray, NSMutableArray类;
NSEnumerator枚举;
NSEnumerator *
Emun=[array objectEnumerator];
While(thingie=[enumerator nextObject]){}
NSDictionary:字典(关键字及其定义的集合。)【也成为散列表,关联数组】,NSMutableDictionary类;
NSNumber:用来包装基本数据类型,如int ,char, float,【将一个基本类型的数据包装成对象叫做装箱。】
NSValue:它可以包装任何类,NSNumber是它的子类。
&在cocoa中看到&CF&字样时,就表示它是苹果公司的Core Foundation&框架相关的内容。
&NSAutoreleasePool:自动释放内存池。
4.&&&&&&&&
每个对象都有一个与之关联的引用计数(也叫保留计数)
当使用alloc, new&方法或通过&copy消息(生成接收对象的一个副本)创建一个对象时,对象的引用计数值被设为1;
&给对象发retain消息时,增加该值;
&发送release消息时,减少该值;
当一个对象的引用计数值变为0时,objective-c会自动向对象发送一条dealloc消息。销毁该对象。
你可以在自己的对象中重写该方法,
使用retainCount消息,可以获取引用计数器的值。
-(unsigned) retainC&&&&
自动释放池:
NSAutoreleasePool *
pool=[[NSAutoreleasePool alloc] init];
[pool release];
注意:xcode自动生成的代码,销毁pool池时,使用的是[pool drain],drain方法只是清空释放池,但不销毁pool.所以在自己编写代码时还是使用release.
而且,drain只适用于MAC OS 10.4以上的版本,而release适用于所有版本。
只有在向某个对象发送autorelease消息时,该对象才会添加到NSAutoreleasepool中,才会被自动释放。
如:[car autorelease];
内存管理黄金准则:&
只有通过alloc, new和&copy方法创建的对象,才需要程序员负责向该对象发送release或autorelease消息。
而通过其他方法获得的对象,则默认为已经被设置为自动释放,所以不需要程序员做任何操作了。
在objective-c 2.0中有垃圾回收机制,
如果要对某个项目使用垃圾回收:
项目信息--build选项卡--查询"garb",出现&objective-c Garbage Collection&,将其值设置为&required[-fobjc-gc-only]&
启用垃圾回收后,通常的内存管理命令全都变成了空操作指令,不执行任何操作。
开发iphone软件,不能使用垃圾回收。
5.&&&&&&&&
对象初始化
两种创建新对象的方法:
[类名&new]
[[类名&alloc] init]
这两种方法是等价的,但cocoa的惯例是使用后者。
alloc在为对象分配空间的同时,将这块内存初始化为0;
Init方法:初始化实例变量,使对象处于可用状态。[返回类型为id,&&返回的值描述了被初始化的对象]
使用new创建新对象时,系统要完成两个步骤:
1.&&&&&&&为对象分配内存,即对象获得一个用来存放其实例变量的内存块;
2.&&&&&&&自动调用init方法,让该对象处于可用状态。
objective-c 2.0的新特性【只适用于mac os x10.5及以上】
@property :表示声明了对象的属性。【这样就不用再写属性的访问器了。】
(他有copy, retain, readwrite, readonly等属性)
@synthesize:表示&创建该属性的访问器&
类别(category)是一种为现有的类添加新方法的方式。
类别的声明:
@interface NSString (NumberConvenience) //类名&(类别名)
-(NSNumber) lengthAsN&&&&&&&&&&&&//扩充方法声明
使用时使用原来的类名,就可以调用他的所有类别中的方法。
类别的局限性:
1.&&&&不能向类中添加新的实例变量;
2.&&&&在类别中的方法若与类中现有的方法重名,则类中的方法不可用,被类别中的新方法取代。
类别的作用:
1.&&&&将类的实现分散到多个文件或框架中;
2.&&&&创建对私有方法的前向引用;
【Cocoa中没有真正的私有方法,则实现私有方法类似功能的方法为:
先在类别中声明方法;然后到现有类的实现中实现该方法。
这样这个类中的其他方法可以使用该方法,而其他外部的类就不会知道该方法的存在了。】
3.&&&&向对象添加非正式协议。
【创建一个NSObject的类别称为创建一个非正式协议。】
委托delegate是一种对象,另一个类的对象会要求委托对象执行它的某些操作。
受委托对象在某个时间(某个事件触发)时,会自动通知委托对象执行委托方法。&
选择器:@selector():选择器只是一个方法名称,但它以objective-c运行时使用的特殊方式编码,以快速执行查询。圆括号中的内容是方法名。
所以Car类的setEngine:方法的选择器是:@selector(setEngine:
受委托对象如何知道其委托对象是否能处理它(受委托对象)发送给它(委托对象)的消息?
通过选择器,受委托对象先检查委托对象,询问其是否能响应该选择器。如果能,则向它发送消息。
正式协议是一个命名的方法列表。
采用协议意味着必须实现该协议的所有方法。否则,编译器会发出警告。
正式协议就像JAVA中的接口一样。&
声明协议:
@protocal&NSCopying
-(id) copywithzone:(NSZone *) //方法列表
采用协议:
@interface Car:NSObject&&NSCopying,NSCoding&&//中括号中是要实现的协议列表
{//实例变量列表}
//方法列表
在objective-c 2.0中,有新特性:@optional, @required
创建APPKIT项目:
File&new project&mac os&application&C
IBOutlet与IBAction
这两个都是APPKIT提供的#defines.
IBOutlet没有任何作用,不会对它进行编译。
IBAction定义为void。
这两个是为Interface Builder以及阅读代码的人提供的标记。
.xib文件一般称为.nib文件。
.nib文件是包含被冻结对象的二进制文件。
而.xib文件是XML格式的nib文件。
阅读(...) 评论()objective-c笔记之集合
NSArray是一个Cocoa类,用来存储对象的有序列表
NSArray中可以放入任何类型的Objective-C对象
NSArray中不能存放C语言类型
NSArray对象作为一个容器来容纳其他的对象,并且可以通过NSArray对这些对象进行管理
NSArray对象也可以当做方法参数或返回值使用
通过NSArray的类方法arrayWithObjects来创建一个NSArray对象
NSArray *array = [NSArray arrayWithObjects : @”one”, @”two”,
@”three”, nil ];
for(int i = 0;i & [array count];i++){
id obj = [array objectAtIndex : i];
NSLog(@“%@\n”,obj);}
NSArray和NSString一样,创建的是不可变大小的数组,容量固定,如果想要使用容量变化的数组,可以使用NSMutableArray同样的NSMutableArray使用arrayWithCapacity方法来创建
使用addObject方法在数组最后添加对象
可以使用removeObjectAtIndex方法来删除指定索引处的对象
在指定索引处插入对象
-(void)insertObject:(id)atIndex: (NSUInteger)
替换指定位置处的对象
-(void)replaceObjectAtIndex:(NSUInteger) withObject:(id)
为可变数组排序,常用三种方式
使用sortUsingComparator方法
使用sortUsingDescriptors方法
使用sortUsingSelector方法
NSArray和NSMutableArray中的内容均可排序,但是排序需要指定排序条件
可变数组可以直接在原数组上排序,不可变数组排序后产生新的数组
前面列出了三种排序方式,第一种需要代码块的知识,后面章节会介绍
主要介绍后两种方式
第二种需要自定义一个(或多个)排序描述
第三种需要使用放入数组内对象的自定义方法
我们对数组的操作最多的就是遍历,可以使用循环改变索引值来查看每一个元素,另外我们还可以使用NSEnumerator来遍历集合中的元素,首先通过objectEnumerator方法获取枚举器NSEnumerator
*enumerator = [array objectEnumerator];
可以通过调用枚举器的nextObject可以返回当前对象,返回之后枚举器指向下一个对象,当返回nil时,枚举器遍历结束。所以数组中以nil作为结束标志id
while(obj = [enumerator nextObject]){
NSLog(@”%@\n”,obj);
}注意:遍历期间不能添加或删除对象
快速枚举语法
//使用id数据类型
for(id obj in array){ & &
NSLog(@“%@\n”,obj);
//使用静态类型 &就是知道什么类型的时候
for(NSString * str in array){
NSLog(@“%@\n”,str);
字典是关键字和其定义所构成的集合,NSDictionary在给定的关键字下存储一个数据,该数据可以是任何Objective-C类型,可以通过这个关键字来访问这个相应的数据,使用dictionaryWithObjectsAndKeys方法来创建一个字典,使用objectForKey方法获取字典中的值
NSDictionary *
Student *stu1 = [Student
new];//……通过stu1各个存取方法为成员变量赋值//创建另外两个Student对象stu2,stu3
dict = [NSDictionary
dictionaryWithObjectsAndKeys:stu1,@”peter”,stu2,@”andy”,stu3,@”lucy”,nil];
id student = [dict objectForKey : @”lucy”];
NSLog(@”%@\n”,student);
同样的类似NSMutableArray,Cocoa提供了NSMutableDictionary
可以创建可变的字典
使用该类的dictionaryWithCapacity类方法来创建
通过setObject:forKey:方法来添加元素,通过removeObjectForKey方法移除元素
-(void) setObject:(id) obj forKey:(id) aK
-(void) removeObjectForKey : (id) aK
字典无法直接使用索引、枚举器或快速枚举来遍历字典中的元素,字典包含一个方法allKeys,返回所有的Key所构成的一个NSArray,可以遍历这个NSArray得到每一个Key,然后再根据Key得到相应的数据,不可变字典和可变字典遍历方式一致
NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys
:stu1,@”peter”,stu2,@”andy”,stu3,@”lucy”,nil];
NSArray *keys = [dict allKeys];
for(i = 0;i & [keys count];i++){
key = [keys objectAtIndex:i];
value = [dict objectForKey:key];
NSLog(@”Key:%@ Value:%@\n”,key,value);
NSEnumerator *enumerator = [keys
objectEnumerator];&
while(key = [enumerator nextObject]){
value = [dict objectForKey:key];
NSLog(@”Key:%@ Value:%@\n”,key,value);
for(key in keys){
value = [dict objectForKey:key];
NSLog(@”Key:%@ Value:%@\n”,key,value);
包装其他数值
int a=1000;
//装箱(把c或者oc的基本数据类型包装成类类型)
NSNumber *number=[NSNumeber numberWithInt:a];
装箱后就可以放入集合或者字典里
NSArray *arr=[NSArray arrayWithObject:number];
number=[arr objectAtIndex:0];
拆箱(取出NUNumber*对应的数值)
int b=[number intValue];
NSLog(@"%d",b);
拆箱成字符串
NSString *str=[number stringValue];
NSLog(@"%@",str);
student stu={"achao",22};//结构体
NSValue *value=[NSValue value:&stu
withObjCType:@encode(student)];
student stu2;
[value getValue:&stu2];//把stu的值放到了stu2里
NSRect rect=NSMakeRect(0,2,10,20);//画一个矩形
NSValue *value=[NSValue valueWithRect:rect];
//放入集合或者字典, 然后再取出
NSRect rect2;
[value getValue:&rect2];
NSLog(@"%lf%lf%lf%lf",rect2.origin.x,rect2.origin.y,rect2.size.width,rect2.size.height);
NSNull *null=[NSNull nill];
NSArray *arr=[NSArray
arrayWithObjects:@"one",null,@"two",nil]
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 nsdata nsarray 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信