基本语法: php
static定义在全局变量上时会改变其做用域,对应所在的局部范围。extern相似php中的global。 数组
结构体struct定义了一个多维kv数组,枚举类型enum检测数据范围,二者经过typedef可封装出自定义类型 。 安全
*表示指针取值,&为取址操做(php中为引用传值,含义不一样)。从实例化一个对象 NSString *foo=[NSString stringWithString:"example"] 可知,对象也是指针;指针取址后可经过运算操做地址。 函数
带*的变量都寄存在heap,相反则在stack。 性能
对象: atom
类中的方法又称消息,一般意义上调用一个方法,在oc中又称发送一个消息。 spa
对象方法init用于初始化函数(相对于php的构造函数construct)。类方法即静态方法 线程
私有方法放在实现文件中,调用方法以前 指针
@sythesize会在编译时生成所需的setter、getter方法 对象
property中的特性包括setter/getter、readwrite/readonly、assign/retain/copy、nonatomic
非线性安全noatomic不使用线程锁,性能略有提升;retain为指针拷贝,copy为内容拷贝,做用于NS对象
内存管理:
调用带有alloc、copy、create,使用相似[Foo alloc] init..]和CreateFoo()会使保留计数加1
经过autorelease在退出循环后会自动释放内存,但不是马上释放;须要马上释放使用[Foo release]形式,或建立自动释放池NSAutoreleasePool,再循环体尾部释放(drain或release),嵌套的释放池在最内部优先释放
init相似php的构造方法__construct,则dealloc则相似析构方法__destruct
oc中容许nil对象调用方法,结果为不执行,所以在释放成员变量后将指针设为nil,不然指向的内存地址会不存在(dangling pointer)
委托模式中对象互相内嵌会致使内存泄露,这时应该将委托变量设为assign类型的弱引用
属性的引用类型,强引用代表保留在内存中的指针,不被回收,弱引用反之
当nib文件中的对象没有被外部引用时,可能会被垃圾回收,所以建立一个强引用的IBOutlet链接到owner对象上