标签:
unsafe_unretained声明一个若引用,但不会自动置为nil,可能会出现野指针。
线程安全下的setter和getter方法:
@synchronized(self){
return [[_value retain] autorelease];
}
}
@synchronized(self){
[aValue retain];
[_value release];
_value = aValue;
}
}
[myThread start];2、NSOperationQueue
NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
oprationQueue addOperationWithBlock:^{
//这个block语句块在子线程中执行
}
http://alloc.sinaapp.com/wp/?p=237
3、Grand Central Dispatch (GCD)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 耗时的操作
dispatch_async(dispatch_get_main_queue(), ^{
// 更新界面
});
});
http://blog.csdn.net/totogo2010/article/details/8016129
PS:不显示的创建线程的方法:用NSObject的类方法 performSelectorInBackground:withObject: 创建一个线程:[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];
参考(http://blog.csdn.net/lifengzhong/article/details/7487505)
多线程实现数据:原子操作(atomic)、加锁(NSLock、NSRecursive、NSConditionLock)、@synchronized
本题的题意是以第一个出现的字母作为参照,只要之后出现相同的字母并且和第一个字母不相邻,那么就删除。为防止删除某些字符之后,把之前不相邻的重复字符串转化为相邻字符串,所以可以先用空格替换掉需要删除的字符,最后对数组里面的空格进行处理。-(void)removeRepeat:(NSString *)aNum
{
NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:10];
for (int i = 0;i < aNum.length;i++)
{
[mArr addObject:[aNum substringWithRange:NSMakeRange(i,1)]];
}
NSLog(@"- %@", mArr);
[self compareNum:mArr];
NSLog(@"%@",mArr);
}
//比较是否相等
-(NSMutableArray *)compareNum:(NSMutableArray *)mArr
{
int count = mArr.count;//重新定义了,count不会减一
for (int j = 0; j < count - 1; j++)
{
for (int i = j; i < count - 1-1-1; i++)
{
NSLog(@" %@ %@",[mArr objectAtIndex:j],[mArr objectAtIndex:i + 2]);
NSString *a = [mArr objectAtIndex:j];
NSString *b = [mArr objectAtIndex:i+2];
if ([a isEqualToString:b])
{
[mArr replaceObjectAtIndex:i + 2 withObject:@" "];
}
}
}
return mArr;
}
参考链接< http://www.2cto.com/kf/201308/237648.html >。
文字常量区--常量字符串存放在这里。程序结束后由系统释放。 程序代码区—存放函数体的二进制文件。
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢 出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。
NSCoding + NSKeyedArchiver实现复杂对象的存储。
1、动态类型<弱类型>(id):在代码的运行阶段判断代码的类型,使用id类型可以让应用在“运行时”使用任何类型来替换。动态类型让程序更加灵活,但是会使数据的统一性降低和代码的可读性。我们常用静态类型<强类型>(如NSString),使用静态类型编译器可以完全分析你的代码,这让代码的性能和可预知性更高。2、动态绑定:让代码在运行时判断需要调用什么方法,而不是在编译时。动态类型和动态绑定使得选择哪个接收者已经调用什么方法都放到运行 时去完成。 3、动态载入:应用程序可以根据需要加载可执行代码以及资源,而不是
在启动时就加载所有资源。
4、SEL类型 iOS在编译的时候会根据方法的名字(包括参数序列),生成一个用来区分这个方法的唯一的ID,这个ID是SEL类型的,SEL的本质就是类方法的编号[函数地址]。(类似C语言里面的函数指针,但是OC的类不能直接使用函数指针,这样只能做一个@selector语法来取。注意:@selector是查找当前类(含子类)的方法。)
标签:
原文地址:http://www.cnblogs.com/mengzhaorui/p/4522781.html