标签:des http ar io os 使用 sp for java
1,os快捷键
Command(长按)+ tab,切换程序窗口。
Command(长按)+空格,切换输入法。
2,预处理指令的作用范围是从他出现的位置到文件的尾,C语言提供的预处理指令主要有:宏定义,文件包含,条件编译,#include"",系统会先在源程序当前目录下寻找,找不到再会去操作系统的path路径中查找,最后才去C语言函数头文件所在目录中查找。#include指令允许嵌套包含,比如a.h包含b.h,b.h包含c.h,但是不允许递归包含,比如 a.h 包含 b.h,b.h 包含 a.h。使用#ifndef _DSD_H_,#define _DSD_H_,防止内容被重复包含。#import可以自动防止同一个文件被导入多次。
3,weak与strong
3.1.(weak与strong)不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使改对象还有_weak类型的指针指向它;
3.2.一旦最后一个指向该对象的strong类型的指针离开,这个对象将被释放,如果这个时候还有weak指针指向该对象,则会清除掉所有剩余的weak指针
只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。
在OC中strong就相当于retain属性,而weak相当于assign。只有一种情况你需要使用weak(默认是strong),就是为了避免retain cycles(就是父类中含有子类{父类retain了子类}, 子类中又调用了父类{子类又retain了父类},这样都无法release)
weak指针主要用于“父-子”关系,父亲拥有一个儿子的strong指针,因此父亲是儿子的所有者;但为了阻止所有权循环,儿子需要使用weak指针指向父亲。典型例子是delegate模式,你的 ViewController通过strong指针(self.view)拥有一个UITableView, UITableView的dataSource和delegate都是weak指针,指向你的ViewController
strong和weak指针的使用注意。
下面代码是有问题的:
- __weak NSString *str = [[NSString alloc] initWithFormat:@"1234"];
- NSLog(@"%@", str);
str是个weak指针,所以NSString对象没有拥有者,在创建之后就会被立即释放。Xcode还会给出警告("Warning: Assigning retained object to weak variable; object will be released after assignment")
4,self:
谁调用self,self就指向谁
Self关键字一定是类的方法中使用
5,多态,多态依赖于继承关系而存在,用父类的指针保存了子类的对象。传入的是哪个对象就会调用哪个对象的方法。
6,属性生成器
@property 自动生成属性声明
@synthesize 自动生成属性实现,Xcode4.3之后就不需要写了
7,数组的切分
使用componentSeparateByString: 来切分NSArray,用componentsJoinedByString来合并,例如
NSString *ss = @"opp:ack:dwdew:oooo";
NSArray *ass = [ss componentsSeparatedByString:@":"];
for (NSString *tt in ass) {
NSLog(@"==%@\n",tt);
}
NSString *heBing = [ass componentsJoinedByString:@":"];
NSLog(@"----%@",heBing);
/*
2014-12-16 09:10:07.101 basicOC[837:12532] ==opp
2014-12-16 09:10:07.102 basicOC[837:12532] ==ack
2014-12-16 09:10:07.102 basicOC[837:12532] ==dwdew
2014-12-16 09:10:07.103 basicOC[837:12532] ==oooo
2014-12-16 09:10:07.103 basicOC[837:12532] ----opp:ack:dwdew:oooo
*/
8,将数组写入文件,NSString ,NSDictionary,NSData也具有类似的功能。 NSArray 的情况如下:
// NSArray *test = @[@"1rrw",@"2rrw",@"r3rw",@"rr4w",@"r5rw",];
// [test writeToFile:@"/Users/god_love_yao/Desktop/test/basicOC/basicOC/deren.txt" atomically:1];
NSArray *test2 = [NSArray arrayWithContentsOfFile:@"/Users/god_love_yao/Desktop/test/basicOC/basicOC/deren.txt"];
for (NSString *tt in test2) {
NSLog(@"===%@\n",tt);
}
/*
2014-12-16 09:50:26.681 basicOC[1578:27734] ===1rrw
2014-12-16 09:50:26.682 basicOC[1578:27734] ===2rrw
2014-12-16 09:50:26.682 basicOC[1578:27734] ===r3rw
2014-12-16 09:50:26.682 basicOC[1578:27734] ===rr4w
2014-12-16 09:50:26.682 basicOC[1578:27734] ===r5rw
*/
9 copy和mutableCopy
copy复制返回的对象是不可变的,mutableCopy则是可变的。(不管以什么样的指针去接收)。
<1> 复制的对象为系统的非容器类对象:NSString、NSNumber等等。
当被复制的对象是不可变的时候,使用copy得到的对象在堆区的地址是一样的(浅复制)。使用mutableCopy得到的在堆区的地址是不一样的(深复制)(新建了一块空间),例如NSString为例,
NSString *s1 = @"deren"; //被复制的对象是不可变
NSString *s2 = [s1 copy]; //这里如果以NSMutableString 来接收的话得到对象还是不可变的,如果修改(“deren”)的话程序会崩了。
NSMutableString *s3 = [s1 mutableCopy]; //这里以NSString 来接收好像没什么大的关系。
NSLog(@"&s1==%p,&s2==%p,&s3==%p\n",&s1,&s2,&s3); //栈区的地址。
NSLog(@"s1==%p,s2==%p,s3==%p",s1,s2,s3); //堆区的地址。
/*
2014-12-16 10:49:30.518 basicOC[2217:42363] &s1==0x7fff55947a98,&s2==0x7fff55947a90,&s3==0x7fff55947a88
2014-12-16 10:49:30.519 basicOC[2217:42363] s1==0x10a2b8068,s2==0x10a2b8068,s3==0x7f8b80c6be10
*/
当被复制的对象是可变的时候,使用copy和mutableCopy返回的对象在堆区都不一样(深复制)例如:
NSMutableString *s1 = [NSMutableString stringWithString:@"dw"]; //被复制的对象是可变
NSString *s2 = [s1 copy];
NSMutableString *s21 = [s1 copy];
NSString *s31 = [s1 mutableCopy];
NSMutableString *s3 = [s1 mutableCopy];
NSLog(@"&s1==%p,&s2==%p,&s21==%p,&s3==%p,&s31==%p,\n",&s1,&s2,&s21,&s3,&s31);
NSLog(@"s1==%p,s2==%p,s21==%p,s3==%p,s31==%p,\n",s1,s2,s21,s3,s31);
/*
2014-12-16 14:32:55.062 basicOC[3119:68992] &s1==0x7fff54f75a98,&s2==0x7fff54f75a90,&s21==0x7fff54f75a88,&s3==0x7fff54f75a78,&s31==0x7fff54f75a80,
2014-12-16 14:32:55.063 basicOC[3119:68992] s1==0x7fe4b1e97750,s2==0x7fe4b1e978a0,s21==0x7fe4b1e97570,s3==0x7fe4b1e993d0,s31==0x7fe4b1e97640,
*/
<2> 复制的对象为系统的容器类对象:NSArray、NSDictionary等等。对于容器类本身,上面讨论的结论也是适用的
当被复制的对象是不可变的时候,使用copy得到的对象在堆区的地址是一样的(浅复制)。使用mutableCopy得到的在堆区的地址是不一样的(深复制)(新建了一块空间),
当被复制的对象是可变的时候,使用copy和mutableCopy返回的对象在堆区都不一样(深复制)例如:
NSString *ss1 = @"daa123";// NSString改为 NSMutableString 也一样
NSString *ss2 = @"frgre";// NSString改为 NSMutableString 也一样
NSArray *array1 = [NSArray arrayWithObjects:ss1,ss2, nil];
NSMutableArray *marray1 = [NSMutableArray arrayWithObjects:ss1,ss2, nil];
NSArray *carray1 = [array1 copy];//= = =
NSArray *carray2 = [array1 mutableCopy];//x = =
NSMutableArray *carray3 = [array1 copy];//= = =
NSMutableArray *carray4 = [array1 mutableCopy];//x = =
NSArray *carray1 = [marray1 copy];//x = =
NSArray *carray2 = [marray1 mutableCopy];//x = =
NSMutableArray *carray3 = [marray1 copy];//x = =
NSMutableArray *carray4 = [marray1 mutableCopy];//x = =
(后面注释”x = =“表示复制返回的数组指针不一样,数组里的对象1一样,对象2一样)
从中可以看出数组的复制不管怎么样复制,只是有的(取决于被复制的对象是否可变)指针复制了,但装在数组里面的对象都没有复制。
a,产生一个对象的可变副本并不要求被复制的对象本身是可变的。也可以创建可变对象的不可变副本。
b,在产生数组的副本时,数组中每个元素的保持计数将通过复制操作自动增 1。所以,需要[release]; 释放它的内存
10,归档和解归档:
<1>单个对象的归档,过程如下:
NSString *homeDirectory = NSHomeDirectory();//E7BABD79-EA1A-491F-A700-9E8409845D1E,这里二次获得目录最后一级不一样,所以下面删了最后一级目录,
//194008ED-75DA-428E-8E8D-3D596421B297
NSString *last = [homeDirectory stringByDeletingLastPathComponent]; //删除最后一级目录
NSString *filePath = [last stringByAppendingString:@"/aaaa.h"];
// NSArray *array = @[@"hello",@"world",@"!",@"-----"];
// if ([NSKeyedArchiver archiveRootObject:array toFile:filePath]) {
// NSLog(@"filePath==%@",filePath);
// };
NSArray *getArray = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"---==%@",getArray);
<2>多个对象的归档,过程如下:
NSString *homeDirectory = NSHomeDirectory();
NSString *last = [homeDirectory stringByDeletingLastPathComponent];
NSString *filePath = [last stringByAppendingString:@"/aaaa.h"];
// NSMutableData *archiData = [[NSMutableData alloc]init];
// NSKeyedArchiver *archi = [[NSKeyedArchiver alloc]initForWritingWithMutableData:archiData];
// [archi encodeObject:@"hello" forKey:@"hello"];
// [archi encodeInt:123 forKey:@"123"];
// [archi encodeObject:@"nice good" forKey:@"good"];
// [archi finishEncoding];
// if([archiData writeToFile:filePath atomically:1])
// {
// NSLog(@"------");
// };
NSMutableData *unArchiData = [[NSMutableData alloc]initWithContentsOfFile:filePath];
NSKeyedUnarchiver *unArchi = [[NSKeyedUnarchiver alloc]initForReadingWithData:unArchiData];
NSLog(@"---=%@\n---=%d\n---=%@\n",[unArchi decodeObjectForKey:@"hello"],[unArchi decodeIntForKey:@"123"],[unArchi decodeObjectForKey:@"good"]);
/*
2014-12-18 11:24:56.746 basicOC[1126:25658] ---=hello
---=123
---=nice good
*/
OC杂记,1214
标签:des http ar io os 使用 sp for java
原文地址:http://www.cnblogs.com/god-love-yao/p/4171315.html