详解Objective-C学习笔记使用教程
Objective-C的学习笔记是本文要介绍的内容,主要来学习Objective-C的属性特点、NSAutoreleasePool的了解、Emacs的移动快捷键+Xcode常用键的内容,来看详细内容讲解。
1、Objective-C 属性特性(assign , retain , copy , readonly , readwrite)
assign:指定setter方法用简单的赋值,这是默认操作。你可以对标量类型(如int)使用这个属性。你可以想象一个float,它不是一个对象,所以它不能retain、copy。
retain:指定retain应该在后面的对象上调用,前一个值发送一条release消息。你可以想象一个NSString实例,它是一个对象,而且你可能想要retain它。
copy:指定应该使用对象的副本(深度复制),前一个值发送一条release消息。基本上像retain,但是没有增加引用计数,是分配一块新的内存来放置它。
readonly:将只生成getter方法而不生成setter方法(getter方法没有get前缀)。
readwrite:默认属性,将生成不带额外参数的getter和setter方法(setter方法只有一个参数)。
2、了解NSAutoreleasePool
NSAutoreleasePool是一个存放对象的集合,添加到NSAutoreleasePool的对象能够被自动释放。
自动释放其实就是在NSAutoreleasePool被清空或是销毁时向池里所有的对象发送一条release消息。
对象不会自动入池,只有当对象发送一条autorelease消息时才会被添加到当前的池中。可以想象池在一个栈中,当前池在栈顶,每创建一个新的池,就压入,使用drain或者release时,就弹出。
当有对象是Autorelease的对象,而当前没有NSAutoreleasePool的话,就会提示内存泄漏(Just Leaking)。一般来说,只要不是用new、alloc、copy方法创建一个对象的话,我们就假设该对象的引用计数为1,而且被添加到NSAutoreleasePool中。
如下面代码就会提示内存泄漏:
NSDate *date = [NSDate date]; NSLog(@"%@",[date description]); return 0; /* objc[3466]: Object 0x1001149c0 of class __NSDate autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug */ NSDate *date = [NSDate date]; NSLog(@"%@",[date description]); return 0; /* objc[3466]: Object 0x1001149c0 of class __NSDate autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug */
关于drain和release的问题可以在此处找到说明。在非GC环境下,两者的作用是相同的。否则你没有理由去使用release,给NSAutoreleasePool发送drain会提醒GC处理池中的对象。
3、Emacs的移动快捷键+Xcode快捷键
虽然不想在学Emacs的使用,但为了在Mac下使用的更顺畅,还是记录下来,因为这些xcode快捷键键可以在Xcode、TextEdit、Safari的URL地址栏等处使用。
control-F 向右边(Forward)移动 control-B 向左边(Backward)移动 control-N 向下(Next)移动一行 control-P 向上(Previous)移动一行 control-K 删除(Kill)光标后的代码 control-A 移动到行首(同command+左箭头) control-E 移动到行尾(同command+右箭头) control-T 转置(Transpose,交换)光标两边的符号 control-D 删除(Delete)光标右边的字符 control-L 将插入点置于窗口正中(不解)
Xcode快捷键: