本人之前学习过一年半ios开发 由于行情太过凄惨,故转前端。心在前端,苹果亦难忘!把我平时的笔记作出给大家总结!

回顾之前的知识

便利初始化函数:框架类库中的一些类有一系列的以init开头的方法,这些方法就是便利初始化函数。例如:NSString的initWithFormat,initWithString等。这些方法都遵循了一个命名规范,就是以init开头。
使用便利初始化函数创建对象首先还是要调用alloc 方法给对象分配内存空间,然后再初始化对象。代码还是比较繁琐的,有没有比较简单创建并初始化对象的方法呢?
Cocoa中,有一些方法通过把内存分配的过程和初始化过程组合起来完成对象的创建,这些方法通常被成为--便利构造器
便利构造函器:命名通常以className开头(类名首字母小写开头),并且都是类方法,例如NSString类的便利构造器:
+(id)stringWithCString(const char *)cString encoding(NSStringEncoding)enc;
+(id)stringWithFormat*(NSString *)format......
进入正题:
总结:这个课就是两种可变的和不可变的(数组、对象、枚举器、字典、set)等。
创建对象,先分配、初始化
老师授课笔记:
可变数组的使用:

NSMutableArray *arrstu=[NSMutableArray arrayWithCapacity:10];

student *stu1=[[student alloc]init];

stu1.name=@"我";

student *stu2=[[student alloc]init];

stu2.name=@"少";

student *stu3=[[student alloc]init];

stu3.name=@"帅";

[arrstu addObject:stu1];

[arrstu addObject:stu2];

[arrstu addObject:stu3];

[arrstu insertObject:@"兵" atIndex:2];//插入

[arrstu removeObjectAtIndex:3];//删除

int count ;

[arrstu replaceObjectAtIndex:2 withObject:@"youxi"];//替换

for(id obj in arrstu)

{

NSLog(@"数组对象%d:%@",count,obj);

count++;

}

课后题目:

1.编写程序,以数组存储字符串”元芳”、”华生”、”平次”,并用循环语句输出数组中存储的所有字符串。

尝试使用可变数组版本进行程序扩展,可以存放不定项个字符串。

NSArray *array = [NSArray arrayWithObjects:@"元芳", @"华生", @"平次", nil];

//使用普通循环遍历数组

NSLog(@"使用普通循环遍历数组:");

for (int i=0; i<[array count]; i++) {

NSLog(@"%@",[array objectAtIndex:i]);

}

//使用枚举器遍历数组

NSLog(@"使用枚举器遍历数组:");

NSEnumerator *objEnumerator = [array objectEnumerator];

id obj = NULL;

while (obj = [objEnumerator nextObject]) {

NSLog(@"%@",obj);

}

//使用快速枚举遍历数组

NSLog(@"使用快速枚举遍历数组:");

for (id obj in array) {

NSLog(@"%@",obj);

}

NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:3];

//可变数组中存放元素个数并不受arrayWithCapacity参数值限制,那只是一个最优值

[mArray addObject:@"元芳"];

[mArray addObject:@"华生"];

[mArray addObject:@"平次"];

[mArray addObject:@"何瑾"];

[mArray addObject:@"习禁苹"];

//使用快速枚举遍历可变数组

NSLog(@"使用快速枚举遍历可变数组:");

for (id obj in mArray) {

NSLog(@"%@",obj);

}

2.编写程序,以可变数组存储1到10之间的不重复的随机整数,再对这个数组进行从小到大排序,最后用循环语句输出所有值。

@autoreleasepool {

NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:10];

NSNumber *number = nil;

int i = 0,j = 0,tmp = 0,value[10] = {0};

BOOL repeat = NO;

//获取1到10之间的不重复的随机整数放入value[10]数组中

for (i=0; i<<span class="s3">10; i++) {

repeat = NO;

tmp = (arc4random() % 10) + 1;//获取1到10之间的随机整数

//以下算法确保生成的随机数不重复

for (j=0; j

if (tmp == value[j]) {

repeat = YES;//重复了

break;

}

}

if (repeat) {

i -= 1;

} else {

value[i] = tmp;

}

}

//装箱1到10之间的随机整数

for (i=0; i<<span class="s3">10; i++) {

number = [NSNumber numberWithInt:value[i]];//装箱1到10之间的随机整数

[mArray addObject:number];//放入可变数组中

}

NSLog(@"排序前:");

for (NSNumber *number in mArray) {

NSLog(@"%d",[number intValue]);

}

[mArray sortUsingSelector:@selector(compare:)];//排序(NSNumber继承NSObject ,可以使用比较compare: isEqual等消息)

NSLog(@"排序后:");

for (NSNumber *number in mArray) {

NSLog(@"%d",[number intValue]);

}

}

5.放四个十进制三位数到一个数组中,然后按从小到大排序后组成一个新的数组

3.编写一个学生类,要求学生类有特征:姓名,年龄,性别,学号,成绩,然后分别根据姓名,年龄,成绩进行排序

//编写一个学生类,要求学生类有特征:姓名,年龄,性别,学号,成绩,然后分别根据姓名,年龄,成绩进行排序

Student * stu_one = [[Student alloc]init];

stu_one.name = @"唐僧";

stu_one.age = 25;

stu_one.score = 100;

stu_one.stuID = 1;

Student * stu_two = [[Student alloc]init];

stu_two.name = @"孙悟空";

stu_two.age = 30;

stu_two.score = 95;

stu_two.stuID = 2;

Student * stu_three = [[Student alloc]init];

stu_three.name = @"孙悟空";

stu_three.age = 35;

stu_three.score = 90;

stu_three.stuID = 3;

NSArray * stuArray = [[NSArray alloc]initWithObjects:stu_one,stu_two,stu_three, nil];

//使用不同的排序方式只需要修改关键字

NSSortDescriptor * sd_stu = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

NSArray * sdArray = [NSArray arrayWithObject:sd_stu];

NSArray * stuArray_last = [stuArray sortedArrayUsingDescriptors:sdArray];

for(id obj in stuArr)

{

NSLog(@"%@",obj);

}

/////////////////////////////////////////////////////////////////////////////////////

@interface Student : NSObject

@property NSString * name;

@property int age;

@property NSString * sex;

@property int stuID;

@property int score;

@end

/////////////////////////////////////////////////////////////////////////////////////

#import "Student.h"

@implementation Student

-(NSString *)description

{

NSString *string=[NSString stringWithFormat:@"大家好我叫%@,今年%d岁了,性别%@,学号:%d,成绩:%d",_name,_age,_sex,_num,_score];

return string;

}

@end

/////////////////////////////////////////////////////////////////////////////////////

4.使用可变数组编写一个学生管理系统,可以任意添加,删除,修改 学生的姓名

使用控制台输入数字决定当前要执行的操作,如  1、添加学生姓名 2、删除学生姓名、3.修改学生姓名

int count;

NSMutableArray *arrstu=[NSMutableArray arrayWithCapacity:10];

Student *stu1=[[Student alloc]init];

stu1.name=@"少";

Student *stu2=[[Student alloc]init];

stu2.name=@"帅";

Student *stu3=[[Student alloc]init];

stu3.name=@"我";

[arrstu addObject:stu1];

[arrstu addObject:stu2];

[arrstu addObject:stu3];

int a;

printf("请输入,你需要的内容:1、添加学生姓名 2、删除学生姓名、3.修改学生姓名");

scanf("%d",&a);

switch (a) {

case 1:

[arrstu insertObject:@"兵" atIndex:2];

break;

case 2:

[arrstu removeObjectAtIndex:1];//删除

break;

case 3:

[arrstu replaceObjectAtIndex:2 withObject:@"youxi"];//替换

break;

default:

break;

}

for(id obj in arrstu)

{

NSLog(@"数组对象%d:%@",count,obj);

count++;

}

2.

NSString *str1=@"123-456-789-000";

NSArray *newArray=[str1 componentsSeparatedByString:@"-"];

NSLog(@"%@",newArray);

NSMutableString *newStr=[NSMutableString stringWithCapacity:10];

for (NSString *s in newArray)// s是指向元素

{

[newStr appendString:s];

}

NSLog(@"newStr =%@",newStr);

字典:

//用NSDictionary方法

NSDictionary *dic=[[NSDictionary alloc] initWithObjectsAndKeys:@"元芳",@"狄仁杰",@"展昭",@"包拯",@"毛利",@"柯南",nil];

for (NSString *key in [dic allKeys]) {

NSString *value=[dic valueForKey:key];

NSLog(@"%@问%@这事你怎么看",key,value);

}

//用NSMutableDictionary方法

NSMutableDictionary *zidian=[[NSMutableDictionary alloc]init];

detective *det1=[[detective alloc]init];

det1.name=@"元芳";

detective *det2=[[detective alloc]init];

det2.name=@"展昭";

detective *det3=[[detective alloc]init];

det3.name=@"毛利";

[zidian setObject:det1 forKey:@"狄仁杰"];

[zidian setObject:det2 forKey:@"包拯"];

[zidian setObject:det3 forKey:@"柯南"];

for (NSString *key in [zidian allKeys]) {

NSString *value=[zidian valueForKey:key];

NSLog(@"%@问%@这事你怎么看!",key,value);

}

int num1=333;

int num2=231;

int num3=158;

int num4=998;

NSMutableArray *arr1=[NSMutableArray arrayWithCapacity:5];

NSNumber *num_1 =[NSNumber numberWithInt:num1];

NSNumber *num_2 =[NSNumber numberWithInt:num2];

NSNumber *num_3 =[NSNumber numberWithInt:num3];

NSNumber *num_4 =[NSNumber numberWithInt:num4];

[arr1 addObject: num_1];

[arr1 addObject: num_2];

[arr1 addObject: num_3];

[arr1 addObject: num_4];

[arr1 sortUsingSelector:@selector(compare:)];

for (id obj in arr1) {

NSLog(@"%@",obj);

}

//取出符串“123-456-789-000”中的数字部分,组成一个新的字符串输出,(提示:可变字符串;返回数组)

NSString *str1=@"123-456-789-000";

NSArray *newArray=[str1 componentsSeparatedByString:@"-"];

NSLog(@"%@",newArray);

NSMutableString *newStr=[NSMutableString stringWithCapacity:10];

for (NSString *s in newArray)// s是指向元素

{

[newStr appendString:s];

}

NSLog(@"newStr =%@",newStr);

字典讲解:

///////////////////////////////////////////////////////////////////////////////////////

#import

#import "Student.h"

int main(int argc, const char * argv[])

{

@autoreleasepool {

Student * stu_1 = [[Student alloc]init];

Student * stu_2 = [[Student alloc]init];

Student * stu_3 = [[Student alloc]init];

Student * stu_4 = [[Student alloc]init];

//使用不可变字典时,必须在创建时指定字典内元素

//注意:作为字典的关键字必须要遵循NSCopying协议

//字典内元素必须成对出现,元素个数永远只有偶数个

//字典中对象的关键字必须唯一

//不可变字典一经创建不可修改

//遍历字典时一定要注意遍历出来的元素顺序

NSDictionary * stuDic = [NSDictionary dictionaryWithObjectsAndKeys:stu_1,@"stu1",stu_2,@"stu2",stu_3,@"stu3",stu_4,@"stu4", nil];

NSLog(@"stuDic = %@",[stuDic objectForKey:@"stu3"]);

NSMutableDictionary * mutDic = [[NSMutableDictionary alloc]init];

//为可变字典添加元素

[mutDic setObject:stu_1 forKey:@"stu1"];

[mutDic setObject:stu_2 forKey:@"stu2"];

NSLog(@"mutDic = %@",mutDic);

//删除可变字典指定元素

[mutDic removeObjectForKey:@"stu1"];

[mutDic setObject:stu_3 forKey:@"stu1"];

[mutDic setDictionary:stuDic];

NSLog(@"mutDic = %@",mutDic);

//集合的特点,元素无序

//元素唯一

//(自学NSMutbaleSet)

//NSNumber 是对C语言中数据类型的封装,可以将c数据类型转换为OC的对象,以方便存放到数组等集合当中

//数据一旦进行转换后,将不再支持算数运算,因为变成了对象

//注意明确转换前后的数据类型对应

int num1 = 65;

int num2 = 20;

NSNumber * intNum = [NSNumber numberWithInt:num1];

NSNumber * intNum2 = [NSNumber numberWithInt:num2];

int tmpint = [intNum intValue];

NSLog(@"%d",tmpint);

NSLog(@"%@",intNum);

//NSValue

NSRect rect = NSMakeRect(0, 0, 320, 480);

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

NSSize size = NSMakeSize(20, 20);

NSValue * sizeValue = [NSValue valueWithSize:size];

NSLog(@"rectValue = %@",rectValue);

NSLog(@"sizeValue = %@",sizeValue);

//使用getValue取值时,参数是要存放值得变量

NSSize tmpsize;

[sizeValue getValue:&tmpsize];

NSLog(@"%f",tmpsize.width);

//(自学NSNull)

//创建空对象,主要用途,数组占位

}

return 0;

}

////////////////////////////////////////////////////////////////////////////////////////

#import

@interface Student : NSObject

@end

///////////////////////////////////////////////////////////////////////////////////////

#import "Student.h"

@implementation Student

@end

///////////////////////////////////////////////////////////////////////////////////////

oc集合的更多相关文章

  1. iOS学习15之OC集合

    1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...

  2. iOS学习16之OC集合遍历和数组排序

    1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...

  3. 常用基础OC 集合

    //    2016年07月19日17:50:53    集合 //七.NSSet 集合对象(容器类,) //  1. 使用类方法创建对象 NSSet *set1 = [NSSet set];  // ...

  4. OC学习13——Foundation框架中的集合

    OC集合类是一些非常有用的工具类,它可以用于存储多个数量不等的对象,并可以实现常用的数据结构(栈.队列等),此外,OC集合还可用于保存具有映射关系的关联数组.OC的集合大致可以分为:NSArray.N ...

  5. swift - 字典和集合

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...

  6. iOS - nil null Nil笔记

    今天查看Nullability and Objective-C发现里面提到了nil和Null等关键字,做一下笔记. nil  ->   Null-Pointer to Objective-C O ...

  7. Objective-C程序结构及语法特点

    程序文件分为头文件(.h)和实现文件(.m): 使用#import关键字将所需的头文件导入程序,并且可以避免程序重复引用相同的头文件: @autoreleasepool { … } 自动释放池: 符号 ...

  8. OC中NSDictionary(字典)、NSMutableDictionary(可变字典)、NSSet(集合)、NSMutableSet(可变集合)得常用方法

    字典用于保存具有映射关系数据的集合 一个key—value对认为是一个条目(entry),字典是存储key—value对的容器 与数组不同,字典靠key存取元素 key不能重复,value必须是对象 ...

  9. OC: 数组、集合、字典

    数组.字典.集合 参考1   参考2  参考3  参考4  参考5 NSArray * nn  = @[@"元素1",@"元素2",@"元素3&quo ...

随机推荐

  1. js闭包演示

    有个网友问了个问题,如下的html,为什么每次输出都是5 <html > <head> <meta http-equiv="Content-Type" ...

  2. 获取设备UDID、IMEI、ICCID、序列号、Mac地址等信息

    在iOS7之前, 可以方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 来获取设备的UDID,但是在iOS7之后这个方法不再适用. 你可以用[[UID ...

  3. Ubuntu install codeblocks by ppa

    sudo add-apt-repository ppa:damien-moore/codeblocks-stable sudo apt-get update sudo apt-get install ...

  4. libCURL开源库在VS2010环境下编译安装,配置详解

    libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...

  5. 关于The C compiler "arm-none-eabi-gcc" is not able to compile a simple test program. 的错误自省...

    在 GCC ARM Embedded https://launchpad.net/gcc-arm-embedded/ 上面下载了个arm-none-eabi-gcc 用cmake 编译时 #指定C交叉 ...

  6. normalize.css入门和下载

    CSS Reset 是革命党,CSS Reset 里最激进那一派提倡不管你小子有用没用,通通给我脱了那身衣服,凭什么你 body 出生就穿一圈 margin,凭什么你姓 h 的比别人吃得胖,凭什么你 ...

  7. MYSQL 5.0 USING BTREE 错误

    今天遇到个错误,导入数据库的时候报错,最后发现是php版本的问题导致包含 KEY `uniacid` (`uniacid`) USING BTREE 的SQL命令报错 5.1之前的写法: KEY `u ...

  8. Zybo GPIO Demo Run Embedded Linux

    1.Environment Ubuntu 12.04 x86_64 Vivado 2013.4 SDK 2013.4   2.Pre-requisites 2.1 CodeSourcery arm-g ...

  9. mysql自动加入添加时间列

    `addtime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  10. jquery 中的框架

    DWZ 国产Ajax RIA开源框架 Ninja UI 框架    提供页面插件 angela ui框架  表单布局等 Chico UI    快速页面布局  PrimeUI    w2ui   布局 ...