iOS复习笔记14:常用数据结构之类

一 NSString/NSMutableString字符串

1 NSString

<pre name="code" class="objc">NSString* s1 = @"string";
//NSString* s2 = [[NSString alloc] initWithFormat(@"%d is one",1)];
NSString* s2 = [NSString stringWithFormat(@"%d is one",1)];

// C语言字符串和OC字符串相互转换
// NSString* os = [[NSString alloc] initWithUTF8String:"C String"];
NSString* os = [NSString stringWithUTF8String:"C String"];
const char* cs = [os UTF8String]; 

// 使用文件内容初始化字符串
// NSString* s3 = [[NSString alloc] initWithContentsOfFile:@"文件绝对路径"
//											  encoding:NSUTF8StringEncoding // 中文编码
//											  error:nil];
NSString* s3 = [NSString stringWithContentsOfFile:@"文件绝对路径"
										 encoding:NSUTF8StringEncoding // 中文编码
										    error:nil];

// URL:///资源路径
// 协议头:///资源路径
// file:///资源路径
// ftp:///资源路径
// NSURL* url = [[NSURL alloc] initWithString:@"file://路径"];
NSURL* url = [NSURL urlWithString:@"file://路径"];
// NSString* s6 = [[NSString alloc] initWithContentsOfURL:url
//											  encoding:NSUTF8StringEncoding // 中文编码
//											  error:nil];
NSString* s6 = [NSString stringWithContentsOfURL:url
										encoding:NSUTF8StringEncoding // 中文编码
										   error:nil];

// 字符串分割
NSArray* arr = [@"one|two|three|four|five" componentsSeparatedByString:@"|" ]

// 写入文件
[s1 writeToFile:@"文件路径"
	atomiccally:YES
	   encoding:NSUTF8StringEncoding
	      error:nil];

[s1 writeToURL:url
	atomiccally:YES
	   encoding:NSUTF8StringEncoding
	      error:nil];

NSString* strNum = @"10";
int n = [strNum intValue];

2 NSMutableStringNSString的子类

NSMutableString* ms1 = [NSMutableString stringWithFormat:@"my age is 10"];
// 添加字符串
[ms1 appendString:@" or 13"];// 无返回值,修改ms1本身的值
// 删除字符串
NSRange rg = [s1 rangOfString:@"age"];
[ms1 deleteCharactersInRange:rg];

NSString* ns1 = @"my age ";
NSString* ns2 = [ns1 stringByAppendingString:@"is 10"];// 返回新的字符串,不修改ns1的值

二 集合类

1 NSArray/NSMutableArray数组

OC数组只能存放OC对象,不能存放基础数据类型和nil

NSArray:不可变数组
NSMutableArray:可变数组

// 数组创建
NSArray* arr1 = [NSArray array];
NSArray* arr2 = [arrayWithObject:@"name"];
// nil 数组元素结束标志
NSArray* arr3 = [arrayWithObjects:@"name", @"id", nil];
NSArray* arr4 = @[@"one",@"two",@"three",@"four"];

// 数组元素个数
unsigned long count1 = [arr3 count];
unsigned long count2 = arr3.count;

// 数组元素访问
NSString* e1 = [arr3 objectAtIndex:1];
NSString* e2 = arr3[0];

// 数组遍历
for (int i = 0; i < arr4.count; ++i)
{
	arr4[i];
}

for (id obj in arr4)
{
	obj;
    [arr4 indexOfObject:obj];// 获取改数组的下标
}

[arr4 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
	if (idx == 1){
		*stop = YES;// 跳出遍历
	}
}];

// 可变数组
NSMutableArray* marr = [[NSMutableArray alloc] init];;
[marr addObject:@"one"];
[marr addObject:@"two"];
[marr addObject:@"three"];

// 可变数组-删除
[marr removeObject:@"one"];
[marr removeObjectAtIndex:0];
[marr removeAllObjects];

2 NSSet/NSMutableSet集合

只能存放OC对象,不能存放基础数据类型和存放nil

NSSet* st1 = [NSSet set];
NSSet* st2 = [NSSet setWithObject:@"one"];
NSSet* st3 = [NSSet setWithObjects:@"one", @"two", nil];

// 随机拿出一个对象
NSString* ssobj = [st3 anyObject];

NSMutableSet* mst = [NSMutableSet set];
[mst addObject:@"three"];
// 删除
[mst removeObject:@"one"];
[mst removeAllObjects];

3 NSDictionary/NSMutableDictionary字典
// 创建
NSArray* keys = @[@"name", @"address"];
NSArray* objs = @[@"jun", @"china"];
NSDictionary* dict1 = [NSDictionary dictionaryWithObjests:objs forKeys:keys];
NSDictionary* dict2 = [NSDictionary dictionaryWithObjestsAndKeys:
						@"name",@"jun",
						@"address",@"china", nil];

NSDictionary* dict3 = @{@"name":@"jun",@"address":@"china"};

// 可变字典
NSMutableDictionary* msdict = [NSDictionary dictionary];

// 添加元素
[dict1 setObject:@"jun" forKey:@"name"];
[dict1 setObject:@"hanfeng" forKey:@"name"];// 覆盖之前的值

// 移除
[dict1 removeObjectForKey:@"name"];

// 访问
id obj1 = [dict1 objectForKey:@"name"];
id obj2 = dict1{@"name"}

// 获取键值对的个数
int count = dict1.count

// 获取所有的key值,然后遍历这个数组
NSArray* ks = [dict1 allKeys]
for (int i = 0; i < dict1.count; ++i)
{
	id k = keys[i];
	id v = dict1[k];//[dict1 objectForKey:k];
}

[dict1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop){
	// key ,obj
}];

上面的三个类(NSArray, NSSet, NSDictionary)称之为集合类

NSArray/NSMutableArray

* 有序

* 快速创建:@[obj1,obj2,...]

* 快速访问:数组名[i]

NSSet/NSMutableSet

* 无序

NSDictionary/NSMutableDictionary

* 无序

* 快速创建:@{key1:value1,key2:value2,...}

* 快速访问:字典名{key}

三 NSValue/NSNumber数字

1 NSValue

将其他数据类型(常见结构体)包装成OC对象, 这样就可以放入OC数组和字典中了。

CGPoint p = CGPointMake(10, 10);
NSValue* v = [NSValue valueWithPoint:p]
CGPoint pt = [v pointValue];

2 NSNumber

将基础数据类型(数字)装成对象,这样就可以放入OC数组和字典中了。

NSNumber num1 = [NSNumber numberWithInt:10];
NSNumber num2 = [NSNumber numberWithLong:10];
NSNumber num3 = [NSNumber numberWithBool:true];
NSNumber num4 = [NSNumber numberWithFloat:10.0];
NSNumber num4 = @10;// 快速转换
int count = 5;
NSNumber num5 = @(count);
...

int i = [num1 intValue];
int l = [num1 longValue];
int b = [num1 boolValue];
int f = [num1 floatValue];
...

四 NSDate日期

<pre name="code" class="objc">NSDate* d1 = [NSDate date];// 返回当前时间
NSLog(@"%@", d1);// 格林尼治时间时间(0时区),跟北京(东八区)时间差8个小时

NSDate* d2 = [NSDate dateWithTimeInterval:5 sinceDate:d1];

// 时间间隔
NSTimeInterval sec1 = [d2 timeIntervalSince1970];

NSTimeInterval sec2 = [d2 timeIntervalSinceNow];

// 日期格式化
NSDateFormatter* f1 = [[NSDateFormatter alloc]init];
// y年M月d日h(12小时制)时H(24小时制)时m分s秒
f1.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString* dateStr = [f1 stringFromDate:d1];

NSString* timeStr = @"2015/02/04 16:57";
NSDateFormatter* f2 = [[NSDateFormatter alloc]init];
f2.dateFormat = @"yyyy/MM/dd HH:mm";

NSDate* d3 = [f2 dateFromString:timeStr];
				
时间: 2024-08-26 01:37:52

iOS复习笔记14:常用数据结构之类的相关文章

iOS复习笔记13:常用结构体

都需要包含Foundation.h头文件 CG:CoreGraphics框架简称,CG开头的在Foundation框架中有声明,但是没有实现 NS:NextStep 一 NSRange范围 1 定义: typedef struct _NSRange{ NSUInteger location; NSUInteger length; }NSRange; 2 示例: NSString* str = @"I love OC"; // NSRange* rg = {2, 4}; // NSRan

python 学习笔记 14 -- 常用的时间模块之datetime

书接上文,前面我们讲到<常用的时间模块之time>,这次我们学习datetime -- 日期和时间值管理模块 使用apihelper 查看datetime 模块,我们可以看到简单的几项: date       ---  日期对象,结构为date(year, month, day) time       ---  时间值对象,结构为 time([hour[, minute[, second[, microsecond[, tzinfo]]]]]).时间对象所有的参数都是可选的.tzinfo 可以

iOS复习笔记1:HelloWorld项目

2012年10月到2013年5月期间,一直都做iOS开发,后来开始做用cocos做游戏开发. 过去了那么久,复习一下以前学的东西. 一 新建工程 打开Xcode,选择File>Project>Single View Application,然后输入工程名HelloWolrd,选择保存路径. 创建完成之后保存,如图: 二 运行 单击上图左上角的三角形按钮,程序久可是运行了,以下界面一闪而过: 然后出现: 这就是用模拟器运行程序啦:如果闲模拟器太大,看不清楚,可以点击模拟器,然后Window>

【iOS学习笔记】常用代码

1,iOS设置UITableView不显示多余的空Cell self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 2,iOS UIWebView高度大小自适应 - (void)webViewDidFinishLoad:(UIWebView *)webView     //网页加载完成的时候调用 {      CGRect frame = webView.frame;     CGSize fitti

iOS开发笔记14:微博/微信登录与分享、微信/支付宝支付

产品中接入了微博/微信的第三方登录分享功能.微信和支付宝的第三方支付功能,之前在开发过程中涉及到这些部分,于是抽空将接入过程梳理了一遍. 1.微博.微信.支付宝SDK相关接入设置 (1)微博SDK SDK下载 设置URL Scheme,用于从第三方应用或浏览器中启动app 将SDK添加到工程中(支持CocoaPods),app启动时(didFinishLaunchingWithOptions)注册appkey 重写AppDelegate 的handleOpenURL和openURL方法,其它引用

iOS复习笔记11:协议和代理

一 功能 可以在协议中声明方法(不能声明变量), 某个类只要遵守这个协议,就相当于拥有协议中所有的方法声明. 父类准守协议,子类也拥有协议中的方法. 协议也可以准守另一个协议. 基协议NSObject(同时也是基类),NSObject基类也准守基协议. 基协议中包含了常用的内存管理方法:release,retain方法等. 二 定义 1 协议定义 @protocal 协议名 <NSObject> // 声明方法 @end 2 遵守协议 2.1 类 @interface 类名 : 父类名 <

iOS复习笔记8:autorelease详解

一 概念 iOS在程序在运行的过程中,会创建很多个释放池,自动释放池以栈的形式存放的(先进后出). 对象调用autorelease时,会被放入栈顶的自动释放池中. 当自动释放池销毁时,会对池的所有对象发送一次release消息: 所以发送autorelease之后引用计数不会立即-1. autorelease返回对象本身. 二 实例 // Person.h @interface Person @property(nonatomic, assign) int age; @end // Person

Java学习笔记-5.常用数据结构

一.数组 1.Java是将数组作为对象来实现的,而非连续的存储空间 2.在Java中,数组时一个类,提供了一些方法和属性,如数组长度array.length 3.Java中数组名可视为对象引用,在初始化时,不能直接定义长度 例:int a[3];    //错误的声明方法 4.数组中的元素也可以是复合数据类型的,这时数组元素实际上是对象引用 例: Complex[] arr = new Complex[3]; int i; for(i = 0; i < arr.length; i++) { ar

iOS复习笔记16:应用启动过程和工程结构

一 新建项目 打开Xcode->new->Project->iOS->Single View Application->下一步->输入工程名->下一步->选择路径->create 二 启动过程 1 载入程序到内存 2 在main函数中创建UIApplication 3 创建AppDelegate 4 开始主循环,监听事件 5 创建UIWindow,设置活动窗口 7 加载Info.plist文件,读取主storyboard文件 8 加载storyboar