您的位置:首页 > 移动开发 > IOS开发

iOS语法小结---豁然开朗

2016-01-20 14:05 375 查看
———————@synthesize,@dynamic——————–

1. @property是对setter和getter方法的声明,编译器遇到@property后会自动

展开为setter和getter方法。

2. 在当下的开发环境中,@property也会对setter和getter方法进行实现

3. 例:

.h文件中声明了 @property(nonatomic,copy)NSString *tempString;

.m文件中系统自动帮你实现

-(NSString *)tempString {

return _tempString;

}

-(void)setTempString:(NSString *)tempString {

_tempString = tempString;

}

注意:在这里系统会去寻找是否你的成员变量有 _tempString,如果没有找到,会帮你生成_tempString

4.如果你在.m文件中@synthesize tempString; 那么系统会去寻找是否你的成员变量有 tempString,如果没有找到,会帮你生成tempString;

5.如果你在.m文件中@synthesize _tempString; 那么系统会去寻找是否你的成员变量有 _tempString,如果没有找到,会帮你生成_tempString;

//编译器很傻的,你想让它生成什么就帮你生产什么。。。

6.如果你在你的.m文件中实现了某个属性的setter或getter方法,则系统就不会再次实现你所实现的方法。

7.@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成。(当然对于readonly的属性只需提供getter即可)。假如一个属性被声明为@dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没问题,但是当程序运行到instance.var =someVar,由于缺setter方法会导致程序崩溃;或者当运行到 someVar = var时,由于缺getter方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定。

———————————–内存管理MRC————————————

1.黄金法则:谁创建谁释放,谁污染谁治理

4. .h文件中 @property(nonatomic,strong)NSArray *tempArray;

.m文件的setter方法为

-(void)setTempArray:(NSArray *)tempArray {

if (_tempArray != tempArray) {

[_tempArray release];

_tempArray = [tempArray retain];

}

}

3.在类的-(void)dealloc {}方法中把本类中关联的其他类的实例变量release一次,以免造成内存泄露.

5. 对于autoReleasePoll,在程序运行过程中会不断的生成自动释放池,当一个对象调用autoRelease后系统会将这个对象放在最近的一个自动释放池中,当池子销毁时,会对池子里的所有对象发送一条release消息,但这并不意味着池子里的对象会全部销毁,只不过是引用计数减一而已。(放在栈顶的自动释放池会最先被销毁,先进先出)。

———————————–内存管理ARC————————————

1.ARC(Automatic Reference Counting),中文名称:自动引用计数

2.ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC)。

3.ARC的修饰符

A. __strong

表示引用为强引用。对应在定义property时的”strong”。所有对象只有当没有任何一个强引用指向时,才会被释放。

注意:如果在声明引用时不加修饰符,那么引用将默认是强引用。当需要释放强引用指向的对象时,需要将强引用置nil。

B. __weak

表示引用为弱引用。对应在定义property时用的”weak”。弱引用不会影响对象的释放,即只要对象没有任何强引用指向,即使有100个弱引用对象指向也没用,该对象依然会被释放。不过好在,对象在被释放的同时,指向它的弱引用会自动被置nil,这个技术叫zeroing weak pointer。这样有效得防止无效指针、野指针的产生。__weak一般用在delegate关系中防止循环引用或者用来修饰指向由Interface Builder编辑与生成的UI控件。

. ———————————-copy—————————————-

1.copy的本质是对用copy产生的新对象的操作不会对原来的对象有任何影响。

2.深拷贝:内容复制

浅拷贝:指针复制(引用计数会加1

3.@property(nonatomic,copy)NSString *tempString;

copy 代表set方法会release旧对象,copy新对象

修改外部的变量,并不会改变内部的变量

-(void)setTempString:(NSString *)tempString {

if (_tempString != tempString) {

[_tempString release];

_tempString = [tempString copy];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS语法小结