oc基础知识

              基础知识(Foundation)
NSRange  (location  length)

NSPoint\CGPoint (CGFloat x, CGFloat y)

NSSize\CGSize (CGFloat width ,CGFloat

heighet)

NSRect\CGRect (NSPoint,NSSize)

typedef assing long NSUInteger;

例子: @“i love oc”
NSRange r1 = {2,4};   //可读性差不用
NSRange r2 = {location = 2,length = 4}; //

不用这个 ,太长
开发中用这个:
NSRange r3 = NSMakeRange(2,4);


查找一个单词在字符串中的范围:(重点)
NSString *str = @"i love oc";
NSRange range = [str rangeOfString
:"love"];
NSLog(@"location=%d,length=
%d",range.location,range.length);
如果找不到 length = 0 ,location = NSNoFound = -1

开发中常用:
 CGPoint p1 = NSMakePoint(10,15);

 NSPoint p1 = CGPointMake(10,15);

 
 NSSize s1 = CGSizeMake(100,50);
 
 CGSize s3 =NSMakeSize(100,50);

将CGRectMake();里的数字打印出来:
CGRect r1 = CGRectMake(0,0,100,50);
将结构体转化为字符串输出:NSString *str =
NSStringFromPoint(p1);
                         NSLog(@"
%@".str);
另一种创建CGRect方法
CGRect r2 = {{0,0}{100,90}};
或者:
CGRect r3 = {p1,s2}

比较两个点的坐标是否相同:依赖于CoreGrahics
BOOL b = CGPointEqualToPoint(CGPoint

(10,12),CGPointMake(10,12));
比较SIZE 以此类推。

判断函数里包不包含点:
BOOL b2 = CGRectContainsPoint(CGRectMake
(50,50,100,50),CGRectMake(50,70));
NSLog(@"%d",b2);

字符串的创建:
1,NSString *str = @"1132123";
2,NSString *str2= [[NSString alloc]
initWithString:@"jack"];
    
3,NSString *str3 = [[NSString alloc]

initFormat:@"age is %d",10];
             C字符串转换 oc字符串:
4,NSString *str4 = [[NSString alloc]
initWithUTF8String:"jack"];
             OC字符串转换 C字符串:
5,const char *c = [str4 UTF8String];

6,类方法创建:
1>[NSString stringWithFormat:@""];
2>[NSString stringWithcontentsOfFile:]
3>[NSURL URLWithSting:@""]

7,NSString *str5 =[[NSString alloc] initWithContentsOfFile:@"路径名"encoding:

NSUTF8StingEncoding error:nil];

8,NSSting *str6 =[[NSString alloc]

initWtihContentsOFUrl:(NSURL*) encoding:NSUTF8StingEncoding error:nil];

 

读取文件:
1,NSString *str5 =[[NSString alloc] initWithContentsOfFile:@"路径名"encoding:

NSUTF8StringEncoding error:nil];

2,NSURL *url = [[NSURL alloc] initWithString:@file//"路径名"];
   NSLog(@"s6=\n"%@.s6);

利用方法检测代码:
[@"jack\n jack"writeToFile:@"路径"atomically:Yes encoding:NSUTF8StringEncoding error:nil];

 

NSMutableString:可变字符串

NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
1>拼接内容到s1后面:
[s1 appendString:@"11 12"];
2>删除字符串中的某个字符,先要获取这个字符的
范围,在删除、(比如删除 'is')
NSRange range = [s1 rangeOfString:@"is"];

[s1 deletecharacterInRange:range];

 

NSString:不可变字符串
NSString *s2 =[NSString

stringWithFormat:@"age is 10"];

NSString *s3 = [s2  stringByAppendingStingString:@"11 12"];
解释 :调用s2字符串 并且在s2字符串原有的字符
的基础上拼接上@“11 12” 把拼接好的字符串

值给了s3 ,s2字符串只是复制 ,并没有改变,改变的是新对象s3.

这就是字符串可变和不可变得本质区别。


集合类 :NSArray NSSet NSDictionary
NSArray:不可变数组
NSMutableArray:可变数组
NSArray oc数组
oc数组 只能存放oc对象类型,但有个缺点不能放
基本数据类型和空值(nil)。

比如: int struct  enum等。

1,NSArray的创建:

NSArray *array2 = [NSArrayarrayWithObject:@"jack"];
注意:当只有一个元素的时候

NSArrayarrayWithObject 的Object后没有s,并且元素后也没有nil.
NSArrat *array3 = [NSArray 
arrayWithObjects:@"jack",@"rose",nil];
//nil:是数组元素结束的标记

2,怎么验证数组中有几个元素
[array2 count];
array2,count;
NSLog(@"%ld",array2.count);

3,怎么访问里面的每一个元素那
有两种方式:Index:索引
1>NSLog(@
%@,[arrayobjectAtIndex:1]);//淘汰不用了
2>array3[0]; //仿c数组访问
NSLog(@"
%@",arry3[0]]);

 

4假如数组中有4个元素
以前方法:
NSArrat *array4 = [NSArray  arrayWithObjects:@"jack",@"rose",@"321313"
,nil];
简化后:@是一个关键字,表示创建一个对象
@[]:代表创建一个新的数组。
//快速创建一个NSArray对象
NSArray *array4 = @

[@"jack",@"rose",@"321313"];

 

NSArray遍历:

第一种方式:
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"jack"];
for (int i = 0;i<array.count;i++)
{

    NSLog(@"%@,array[i]");
}
p是指针:打印结果是类名+内存地址。

 

第二种方式:叫快速遍历。
开发中使用
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"jack"];
把数组中的每一个元素一个一个拿出来赋值给obj.

每赋值一次执行一次循环体。
id obj代表着数组中的每一元素。
for(id obj in array)
{   //找出obj元素在数组中的位置
   NSUInteger i= [array

indexOfObject:obj];
    NSLog(@"%ld -
%@",i,obj);
}

快速遍历的另一种方式://每遍历到一个元素,就会调用一次block,并且当前元素和索引位置

当做参数传给block。

[array enumerateObjextsUsingBlock];

^(id obj,NSUInteger idx,BooL *stop)
{
NSLog(@"%ld - %@",idx,obj);
      if(idx == 0)
      {
        //停止遍历
          *stop = YES;
       }


}];


NSMutableArray 可变数组

NSMutableArray *array = [NSMutableArray arrayWithObject:@"rose",@"jim",nil];
添加元素
[array addObject:[[Person alloc]init]];
[array addObject:@""jack]

删除所有元素
[array removeAllObjects];
删除指定元素
[array removeObject:@"jack"];
删除第N(写数字)个索引位置的字符
[array removeObjectAtIndex:N]
NSLog(@"%ld",array.count);
看看数组中少了那个字符(元素),打印整个数组
NSLog(@"
%@",array);

注意事项:
@[@"jack",@"rose"] 返回的是NSSarray,是不可
变数组。
NSMutableArray *array = @[@"jack",@"rose"]

这种写法是错误的。

 

NSSet 没有快速创建方法

NSMutableSet 随时可以加对象,但加进去的对象是没有顺序的。

NSSet *s = [NSSet set];
NSSet *s2 = [NSSet

setWithObjects:@"jack","rose","jack1","jack2",nil];
随机取出一个元素。
NSString *str = [s2 anyObject];
NSLog(@"%ld",s2.count);


NSMutableSet

NSMtableSet *s =[NSMutable set];
添加元素
[s addObject:@"jack"];
删除元素
[s removeObject:(id)];

 

NSSet 和 NSArray的对比
1,共同点
都是集合,都能存放多个OC对象{基本数据类型不
能放}
都有一个可用的子类
本身不可变

2,不同点
NSArray有顺序,NSSet顺序。

      NSdictionary 字 典
里面存储的东西都是键值对。key->value

使用场合:一对一关系的时候
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack"
forkey:@"name"];
id obu = [dict objectForKey:@"name"];
NSLog(@"
%@",obj);

NSDictionary *dict = [[NSDictionary  dictionaryWithObjects:objects  forKeys:keys]];

NSDictionary *dic = [NSDictionary  dictionaryWithObjectsAndKey;

@“jack”,@"name";
@"北京",@“address”,
@"32323232",@"qq",nil];
id obj = [dic objectForKey:@"name"];

开发中用:
NSDictionary *dic = @{

@“name”:@"jack",

@“adress”:@"北京"};
id obj =dict[@"name"];
NSLog(@"
%@",obj);

访问键值对的个数:
NSLog(@"%ld",dict.count);

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
添加键值对
[dict setObject:@"jack"
forKey@"name"];
[dict setObject:@"北京"
forKey@"address"];
删除键值对
[dict removeObjectForKey:@"name"];
NSLog("
%@",dict); 打印字典会议一个key+value的形式输出。
[dict setObject:@"jim"
forKey@"name"];
[dict setObject:@"jack"
forKey@"name"];
如果字典中有两个相同的Key,那么在打印后最后
一个属性会覆盖掉前一个属性。
NSString *str = dict[@"name"];
NSLog(@"
%@",str);

注意点
@[@"name":@"jack"];只能在不可变的Dictionary中使用 ,不能再可变Dictionary中使用。

 

字典的遍历
之前的方法:
NSDictionary *dir = @{
@"address":@"jack",
@"name":@"jack1",
@"name1":@"jack",
@"qq":@"13132131"
};
NSArray *Key = [dict allKeys];
for (int i = 0;i<dict.count;i++)
{
      NSString *Key =Keys[i];
      NSString *object = dict[key];
      NSLog(@"%@ =
%@",key,object);
}
开发中用block
[dict enumrateKeysAndObjectUsingBlock:
^(id key,id obj,BOOL *stop)
{
    NSLog(@"%@ -
%@",key,obj)
    *stop = YES; 停止遍历
} ];

牛B人写法(可读性差 让别人看不懂)
NSArray *person = @[
@{@"address":@"jack"},
@{"name":@"jack1"},
@{"name1":@"jack"},
@{"qq":@"13132131"}

];
这步:NSLog(@"
%@",person[1][@"qq"]);
先去出1位置对应的字典,再取出字典中QQ这个key
对应数据。

NSNumber:

基本数据类型无法放入集合类中,包装后可以放入。怎么包装:
1 in类型  转换为NSNumber 类型
NSNumber *num = [NSNumber 
numberWithInt:10];
NSDictionary *dict = @{
@"name":@"jack",
@"age":num 
};
NSNumber *num2 = dict(@"age");
[num2 intValue]; 转换为int类型值
 
2,double类型
NSNumber *n = [NSNumber  
numberWithDouble:10.5];
[n doubleVaule];

3,基本数据类型转为字符串类型
NSString *str = [NSString   stringWithFormat:@"%d",20];

4,把字符串转为基本数据类型
NSString *str = [NSString  
stringWithFormat:@"%d",20];
[str intValue];
打印出来看看:
NSLog(@"%d",[str intValue]);

编译器特性:
开发中用下面的
NSArray *array = @{
@{@"name":@"jack",@"age": [NSNumber 
numberWithInt:26]},
@{@"name":@"jim",@"age": [NSNumber 
numberWithInt:28]},
@{@"name":@"rose",@"age": [NSNumber 
numberWithInt:25]}
}

以后:比如上面,[NSNumber numberWithInt:26]
写成@26.编译器特性,编译器会直接把@26 转换成
NSNumber类型,所以上面可以写成:
}
NSArray *array = @{
@{@"name":@"jack",@"age":@26},
@{@"name":@"jim",@"age":@29},
@{@"name":@"rose",@"age":@25}
}

其他基本数据类型都可以包装成NSNumber.

将int age =10 变量包装成NSNumber类型
@(age); 如果不写小括号 @age;系统会认为是关
键字 报错。

NSValue:
NSNumber 只能保证数字,不能包装结构体。
NSValue 能包装任何东西
NSNumber之所以能包装基本数据类型为对象,是因

为继承了NSValue。
CGPoint p = CGPointMake(10,10);
NSValue *value = [NSValue 
valueWithPoint:p];
NSArray *array
=@{value};
将Value转为对应的结构体
[value pointValue];

NSDate:利用对象表示时间
创建一个时间对象
NSDate *date = [NSDate date];
打印出来的时间是0时区的时间,与北京慢了8个小
时。
NSLog(@"
%@",date);

从date时间 慢5秒
NSDate *date2 = [NSDate  dateWithTimeInterval:5 sinceDate:date];

从1970开始走过的秒数
NSTimeTnterval seconds = [date2 
timeInterval5Since1970];
 
从调用代码到现在的时间
[date2 timeIntervalSinceNow];

 

开发应用:日期格式化
NSDateFormatter *formatter = 
[[NSDateFormatter alloc] init];
y年 M月 d日  m分 s秒 H(24)时  h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"
NSString *str = [formatter 
stringFromDate:date];
NSLog(@"
% @",str);

 

把字符串转化为NSDate

NSString *time = @"2011/09/10 19:60";
NSDateFormatter *formatter =
[[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm"

NSDate *date=[formatter  dateFromString:time];
NSLog(@"%d",date);

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值