Student.h:
#import <Foundation/Foundation.h>
@interface Student : NSObject
+(id)student;
-(void)test;
@end
Student.m:
#import "Student.h"
@implementation Student
+(id)student{
return [[[Student alloc] init] autorelease];
}
-(void)test:(NSString *) str{
NSLog(@"%@->test-%@",self,str);
}
-(void)dealloc{
NSLog(@"Student%@被销毁了",self);
[super dealloc];
}
@end
main:
#import <Foundation/Foundation.h>
#import "Student.h"
void arrayCreate(){
//静态创建数组,a不需要我们管理内存
NSArray *array=[NSArray array];
array = [NSArray arrayWithObject:@"abc"];
array=[NSArray arrayWithObjects:@"d",@"e",@"f",nil];
NSLog(@"%@",array);
NSLog(@"数组的元素个数:%zi",[array count]);
}
void arrayUse(){
NSArray *obj=[[[NSArray alloc] init] autorelease];
NSArray *array=[NSArray arrayWithObjects:@"a",@"b",@"c",obj,nil];
if([array containsObject:@"a"]){
NSLog(@"数组中包含了a元素");
}
NSLog(@"最后一个元素是:%@",[array lastObject]);
NSLog(@"第2个元素是:%@",[array objectAtIndex:1]);
NSLog(@"c元素的位置:%zi",[array indexOfObject:@"c"]+1);
}
#pragma mark - 数组的内存管理
void arrayMemory(){
Student *stu1=[[Student alloc] init];
Student *stu2=[[Student alloc] init];
Student *stu3=[[Student alloc] init];
NSLog(@"stu1的计数器%i",[stu1 retainCount]);
//注意:将一个OC对象塞给array之后,这个对象的计数器加1
NSArray *array=[[NSArray alloc] initWithObjects:stu1,stu2,stu3,nil]; //注意:将一个OC对象塞给array之后,这个对象的计数器加1
NSLog(@"stu1的计数器%i",[stu1 retainCount]);
NSLog(@"元素个数:%zi",array.count);
[stu1 release];
[stu2 release];
[stu3 release];
[array release];
}
#pragma mark - 给数组里面的元素发送信息
void arrayMessage(){
Student *stu1=[Student student];
Student *stu2=[Student student];
Student *stu3=[Student student];
NSArray * array=[NSArray arrayWithObjects:stu1,stu2,stu3, nil];//静态方法不需要我们管理内存
//将array里面多有对象都调用一次test方法
//[array makeObjectsPerformSelector:@selector(test)];
[array makeObjectsPerformSelector:@selector(test:) withObject:@"123"]; //注意冒号也是方法名的一部分,这个顶多只支持传一个参数
}
#pragma mark - 遍历数组1(基本for循环遍历)
void arrayFor1(){
Student *stu1=[Student student];
NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
int count=array.count; //得到数组的元素个数
for(int i=0;i<count;i++){ //返回id
id obj=[array objectAtIndex:i]; //id=void *
NSLog(@"%->%@",i,obj);
}
}
#pragma mark - 遍历数组2(快速遍历)
void arrayFor2(){
Student *stu1=[Student student];
NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
//快速遍历
int i=0;
for(id obj in array){
NSLog(@"%->%@",i,obj);
i++;
}
}
#pragma mark - 遍历数组3(用Block遍历)
void arrayFor3(){
Student *stu1=[Student student];
NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
//用Block遍历
[array enumerateObjectsUsingBlok:^(id obj,NSUinter idx,BOOL *stop){
NSLog(@"%i-%@",idx,obj);
if(idx==2){
//利用指针变量修改外面BOOL的值
*stop=YES;//调用指针参数 改变外面的变量 终止循环
}
}];
}
#pragma mark - 遍历数组4(用迭代器遍历)
void arrayFor4(){
Student *stu1=[Student student];
NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
//用迭代器遍历数组
//获取数组的迭代器
NSEnumerator *enumerator=[array objectEnumerator];
// //取得下一个对象
// [enumerator nextObject];
id obj=nil;
if(obj=[enumerator nextObject]){
NSLog(@"obj=%@",obj);
}
// //返回迭代器中所有的元素
// [array allObjects];
//注意:这个方法只能返回没由遍历过的,要使用这种方法返回所有的对象,就放在nextObject方法之前!!!
NSArray * array2=[array allObjects];
NSLog(@"array2:%@",array2);
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
arrayCreate();
arrayUse();
arrayMemory();
arrayFor1();
arrayFor2();
arrayFor3();
arrayFor4();
}
return 0;
}