oc学习笔记(十)Foundation
来源:互联网 发布:陌陌加人软件 编辑:程序博客网 时间:2024/06/05 14:28
一、 结构体
NSRange (location length)两个属性
NSPoint \ CGPoint 一般用后者(跨平台),下面几个也一样用后者
NSSize \ CGSize
NSRect \ CGRect
1.NSRage 范围
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){// struct Date {// int year;// int month;// int day;// };// struct Date d = {2011, 1, 9};// // @"i love oc" ;//求love 的范围// // NSRange r1 = {2, 3}; //可读性不好,一般不用// NSRange r2 = {.location = 2, .length =4}; //太冗余了,也不用// NSRange r3 = NSMakeRange(2, 4); // 掌握 NSString *str = @"i love you"; //查找某个字符串在str中的范围 //如果找不到 ,length=0, location=NSNotFound==-1(以%d方式打印出来是-1,如果以%ld打印出来是很大的一个数) NSRange range = [str rangeOfString:@"i"]; NSLog(@"loc=%ld, length = %ld", range.location, range.length); return 0;}
3. CGSize 可以代表一块尺寸区域
4.CGRect (CGPoint CGSize)
CGPoint p1 =NSMakePoint(10,20);
CGPoint p2 = CGPointMake(10,20);
CGSize s1 = CGSizeMake(100,50);
CGRect r1 =CGRectMake(30,40,100,50);
还可以如下:
CGRect r2 = {{10,20},{100,50}};
CGRect r3 = {p1,s1};
CGRect r4 = {CGPointZero, CGSizeMake(100, 50)};
//将结构体转换成字符串
NSString *str =NSStringFromPoint(p1);
同理还有NSString *str2 =NSStringFromSize(s1);
NSLog(@"%@",str);
5.比较两个点是否相同(x,y)
//比较两个点是否相同
BOOL b = CGPointEqualToPoint(CGPointMake(10,20),CGPointMake(10,20));
//比较范围是否相同
BOOL b2 = CGSizeEqualToSize(CGSizeMake(100,50),CGSizeMake(100,50));
//判断一个点是否在范围内
BOOL b3 =CGRectContainsPoint(CGRectMake(50,40,100,50),CGPointMake(130,70));
二、字符串
//NSString : 不可变字符串
//NSMutableString: 可变字符串
//mutable就是可变的意思
NSString *s1 = @"jack";
NSString *s3 = [[NSStringalloc]initWithFormat:@"age is %d",10 ];
//c字符串--》OC字符串,注意后面没有@
NSString *s4 = [[NSStringalloc]initWithUTF8String:"jack"];
//OC字符串 -->c字符串const char *s5 = [s4UTF8String];
//读取文件
NSString *s5 = [[NSStringalloc]initWithContentsOfFile:@"/Users/apple/Desktop/abc/aaa.c"encoding:NSUTF8StringEncodingerror:nil];
NSLog(@"%@",s5);
用url是万能的
// URL:资源路径
// 协议头:路径
// file://
// ftp://
// http://weibo.com.a.png
NSURL *url = [[NSURLalloc]initWithString:@"file:///Users/apple/Desktop/abc/aaa.c"];//需要协议头
//下面这种不需要协议头
NSURL *s9 = [[NSURL alloc] initFileURLWithPath:@"/Users/apple/Desktop/abc/aaa.c"];
NSString *s7 = [[NSStringalloc]initWithContentsOfURL:urlencoding:NSUTF8StringEncodingerror:nil];
//一般都有对应的类方法,而且一般用类方法来调用。
[NSURL URLWithString:<#(NSString *)#>] //相当对应上面的方法
//[NSString stringWithFormat:@"age is %d",age]
[NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>
//写文件
注意,需要添加CoreGraphics.framework
[@"jack jack"writeToFile:@"/Users/apple/Desktop/abc/a1.c"atomically:YESencoding:NSUTF8StringEncodingerror:nil];
//atomicall:yes 安全,如果写入失败,不会创建。
//可变字符串
NSMutableString *s1 = [NSMutableStringstringWithFormat:@"age is 10"];
//拼接字符串
[s1 appendString:@"11 12"];
//获取is的范围并且删除,不论字符串位置在哪
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRange:range];
//而不可变字符串只可以拼接后赋值给新的字符串
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
NSString *s3 = [s2stringByAppendingString:s2];
三、集合类
1.NSArray 对象数组(不可变)有序;
// OC数组只能存放OC对象、不能存放非对象类型,比如int、struct、enum等
//这个array永远是空数组
//NSArray *array = [NSArray array];
1>array简单使用
NSArray *array2 = [NSArrayarrayWithObject:@"jack"];
//nil结束村志
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
//NSArray的元素个数
NSLog(@"%ld", array2.count);
//NSArray中元素的访问
NSLog(@"%@",[array3 objectAtIndex:1]);
//由于编译器特性,array3[1]等价于上边
NSLog(@"%@",array3[0]);
Person *p = [[Personalloc]init];
2>array遍历数组
NSArray *array = @[p, @"rose", @"jack"];
//第一种遍历数组
for (int i =0; i<array.count; i++) {
NSLog(@"%@",array[i]);
}
//第二种
for (id objin array) {
NSUInteger i =[array indexOfObject:obj];
NSLog(@"%ld-%@", i, obj);
}
//第三种方式用block
[array enumerateObjectsUsingBlock:
^(id obj,NSUInteger idx,BOOL *stop) {
NSLog(@"%ld - %@", idx, obj);
if (idx ==0)
{
//停止遍历
*stop = YES;
}
}];
//创建可变数组并添加元素
NSMutableArray *array = [NSMutableArrayarrayWithObjects:@"rose",@"rose",@"jim",nil];
// NSMutableArray *array = [NSMutableArray array];
//添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
//错误写法,不能放空值
//[array addObject:nil];
//删除元素
//[array removeObject:@"jim"];
//删除全部
//[array removeAllObjects];
//删除指定位置元素
//[array removeObjectAtIndex:0];
NSLog(@"%@", array);;
NSLog(@"%ld", array.count);
1.2.1>/*
NSMutableArray *array = @[@"jack",@"jim"];
[array addObject:@"rose"];
*/
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
*/
// 永远是空的Set
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObjects:@"jack", @"rose",@"jim", nil];
// 随机返回个变量
NSSet *str = [s2 anyObject];
NSLog(@"%@", str);
//NSLog(@"%ld", s2.count);
// 可变Set
NSMutableSet *s3 = [NSMutableSetset];
//添加元素
[s3 addObject:@"jack"];
//删除元素(只能删除全部或者某个元素)
// [s3 removeObject:<#(id)#>];
//第一种方法,只能创建一个
NSDictionary *dict1 = [NSDictionarydictionaryWithObject:@"jack"forKey:@"name"];
//第二种方法创建多个
NSArray *key =@[@"name",@"age",@"address"];
NSArray *objects = @[@"jack",@"23",@"北京"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:key];
// 第三种
NSDictionary *dict3 = [NSDictionarydictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京",@"address",
@"3232342",@"qq",nil];
//第四种,编译器特性, (注:这种方式仅能给不可变字典使用,返回值类型为NSDictionary)
NSDictionary *dict4 =@{@"name" :@"jack",@"address" :@"北京",@"qq" :@"4324234"};
// 能过某个key找到对应的值
id obj = [dict4 objectForKey:@"qq"];
//编译器特性等价于上面的
id obj2 = dict4[@"qq"];
NSLog(@"%@", obj2);
NSMutableDictionary *dict = [NSMutableDictionarydictionary];
//添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京"forKey:@"address"];
//添加一样的key,则会覆盖
[dict setObject:@"rose" forKey:@"name"];
//移除键值对
//[dict removeObjectForKey:<#(id)#>];
NSString *str = dict[@"name"];
NSLog(@"%@", str);
3.遍历字典
// 字典不允许有相同的key,但允许有相同的value(Object) // 字典的无序的 NSDictionary *dict = @{ @"address" : @"北京", @"name" : @"jack", @"name2" : @"jack", @"name3" : @"jack", @"qq" : @"7657567765"}; // NSArray *keys = [dict allKeys]; // // for (int i = 0; i<dict.count; i++) // { // NSString *key = keys[i]; // NSString *object = dict[key]; // // // NSLog(@"%@ = %@", key, object); // } [dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@ - %@", key, obj); // *stop = YES; }];
//想用有序字典,场景,联系人,可用如下方式,用数组存放字典 NSArray *persons = @[ @{@"name" : @"jack", @"qq" : @"353432", @"books" : @[@"5分钟学会ios", @"5分钟突破android编程"]}, @{@"name" : @"rose", @"qq" : @"9890897897"}, @{@"name" : @"jim", @"qq" : @"89079879"} ]; // 特殊写法 // 1.先取出字典中qq这个key对应的数据 NSLog(@"%@", persons[2][@"qq"]); NSLog(@"%@", persons[0][@"books"][1]); NSLog(@"%@", persons[1]);
三、NSNumber 和NSValue
1.NSNumber 把基本数据类型包装成对象
NSNumber *num = [NSNumbernumberWithInt:20];
NSDictionary *dict = @{@"name":@"jack",
@"age" : num
};
NSNumber *num2 = dict[@"age"];
int a = [num2 intValue];
NSNumber *n = [NSNumbernumberWithDouble:10.5];
int d = [n doubleValue];
int a = 20;
//将整型转成字符串
NSString *str = [NSString stringWithFormat:@"%d", a];
//[str intValue];等价于下面
//[@"20" intValue];
//又一个编译器特性
//@20;
//相当于
[NSNumbernumberWithInt:20];
//还有
@10.5;// NSNumber对象
@YES;// NSNumber对象
@'A';// NSNumber对象
@"A";// NSString对象
int age =20;
@(age);// NSNumber对象
2.NSValue
//NSNumber 之所以能包装基本数据类型,是因为继承了NSValue,
NSValue 可以把结构体包装成对象
//下面是一个结构体
CGPoint p = CGPointMake(10,10);
//把结构体包装成oc对象
NSValue *value = [NSValue valueWithPoint:p];
//然后就可以把value放进数组里了
NSArray *array = @[value];
//再转回结构体
cgpoint p2 = [value pointerValue];
NSDate *date = [NSDatedate];
//打印出来是0时区的时间 (北京是东8区需要加上8小时)
NSLog(@"%@", date);
NSDate *date2 = [NSDatedateWithTimeInterval:200sinceDate:date];
NSTimeInterval seconds = [date2 timeIntervalSince1970];
NSLog(@"%@", date2);
日期格式
NSDate *date = [NSDatedate];
//日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
//y年M月 d日
//m分 s秒 H(24)时 h(12)时
formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";
@"2011-09-10 17:56:45";
NSString *str = [formatter stringFromDate:date];
//打印出来的是当前的时间
NSLog(@"%@", str);
NSString *time =@"2013/09/10 18:56";
NSDateFormatter *formater = [[NSDateFormatteralloc]init];
formater.dateFormat =@"yyyy/MM/dd HH:mm";
NSDate *date = [formater dateFromString:time];
NSLog(@"%@", date);
五、NSObject 中常用用法
//// main.m// Foundation15-NSObject//// Created by mj on 13-4-7.// Copyright (c) 2013年 itcast. All rights reserved.//#import <Foundation/Foundation.h>#import "Student.h"#import "Person.h"#pragma mark NSObject常用方法void objUse() { Student *stu = [[[Student alloc] init] autorelease]; // isKindOfClass判断对象是否属于某个类 或者 子类 if ( [stu isKindOfClass:[Person class]] ) { // NSLog(@"stu属于Person或者继承自Person"); } // isMemberOfClass判断对象是否属于某个类(不包括子类) BOOL result = [stu isMemberOfClass:[Student class]]; // NSLog(@"%i", result); // 还有以前的两种如下 // conformsToProtocol:判断是否遵守了某个协议 if ([stu conformsToProtocol:@protocol(Study)]) { NSLog(@"Student遵守了Study这个协议"); } // respondsToSelector:判断是否实现了某个方法 if ( ![stu respondsToSelector:@selector(test)] ) { NSLog(@"Student没有实现test这个方法"); } // 直接调用 // [stu test]; // 间接调用 [stu performSelector:@selector(test)]; // [stu performSelector:@selector(test2:) withObject:@"abc"]; // 延迟2秒后调用test2:方法 [stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];}void reflect() { // 类的反射 NSString *str = @"Person"; Class class = NSClassFromString(str); Person *person = [[class alloc] init]; NSLog(@"%@", person); // Class变成字符串 NSString *name = NSStringFromClass([Person class]); // 方法的反射 NSString *method = @"test"; SEL selector = NSSelectorFromString(method); [person performSelector:selector]; // 将SEL转换为字符串 NSString *selectorName = NSStringFromSelector(selector); [person release];}int main(int argc, const char * argv[]){ @autoreleasepool { reflect(); } return 0;}
- oc学习笔记(十)Foundation
- OC学习笔记之foundation
- OC学习笔记-Foundation框架(一)
- OC学习笔记-Foundation框架(二)
- IOS学习---OC基础学习(Foundation)
- 黑马程序员-OC学习笔记-----Foundation框架(常用结构体和NSString)
- 黑马程序员-OC学习笔记-----Foundation框架(集合、NSNumber、NSDate)
- iOS学习笔记:Object-C基础语法(OC介绍与Foundation初步)
- OC学习笔记之Foundation框架NSString与NSMutableString
- OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- 黑马程序员学习笔记-OC之foundation框架
- 学习笔记(OC)--Foundation框架的基本应用一
- 黑马程序员-----oc语言学习笔记之foundation框架-NSString
- 黑马程序员-----oc语言学习笔记之foundation-NSArray
- OC学习笔记18--Foundation之包装类与日期
- OC学习笔记十---Block与@protocol
- OC学习笔记十 copy语法
- OC:NSNumber (Foundation)
- 《浪潮之巅》读后感
- 2014薪水
- js new对象
- 2014-03-29.阿里实习生招聘笔试题目
- jQuery源码解析之构建jQuery之构建函数jQuery的7种用法
- oc学习笔记(十)Foundation
- sql语句报错:“不是可以识别的内置函数名称”
- android 开发中连接webservice时候添加ksoap2的小经验
- Android NDK 编译脚本原理分析
- 伪静态和真静态
- 主宰全球的10大算法
- IOS中发布应用程序,进度条一直不走怎么处理
- csdn code帮助文档地址
- android-aidl