黑马程序员 --- @property参数
来源:互联网 发布:大数据开发方向啥意思 编辑:程序博客网 时间:2024/05/19 07:09
@property参数
@property是编译器的指令;@property int age;用来告诉编译器要做三件事:1.定义一个实例变量2.在.h中声明这个实例变量的set、get方法3.在.m中实现这个实例变量的set、get方法。这是Xcode4.4后为我们做的简化操作。
@property有三类参数如下:@property (参数1,参数2 等)类型变量
1.原子性:atomic(对属性加锁,多线程下线程安全,默认值);
nonatomic(对属性不加锁,多线程下不安全,但是速度快)
2.可读性:readwrite(可读可写setter和getter) readonly(只有getter方法)
3.内存管理:assign(直接赋值基本类型 非oc类型)
retain(release 旧值 再retain新值,在MRC中使用适合 oc类型)
copy(release 旧值,再copy新值,一般用于NSString)
weak:弱指针(在ARC中使用,适用于OC对象类型,相当于MRC中的assign)
strong:强指针(在ARC中使用,适用于OC对象类型,相当于MRC中的retain)
原子性:这两个关键字除非在多线程下注重安全问题时,设为atomic,其他都可以设为nonatomic
可读性:如果不想让外界对实例变量修改的话,就设为readonly,例如:
#import <Foundation/Foundation.h>@implement Person :NSObject@property (nonatomic ,readonly) int age;@end内存管理:retainCount 是记录对象内存引用次数(retain,copy,release),retain使用说明:
//Student.h:#import <Foundation/Foundation.h>@interface Student : NSObject@property (nonatomic ,retain) Dog *dog;@end
//Student.m#import "Student.h"@implementation Student : NSObject-(void)setDog:(Dog *)dog{if(_dog != dog){ //判断两个变量相等[_dog release]; //不相等先把以前的_dog释放掉_dog = [dog retain]; //retainCount计数器加一}-(void)dealloc{[_dog release];[super dealloc];}@end
strong和weak指针:为了ARC 搞出来两个指针关键字,strong强指针指向一块内存区域就说明这快内存区域不能
//Student.h:#import <Foundation/Foundation.h>#import "Dog.h"@interface Student : NSObject@property (nonatomic ,strong) Dog *dog;@end
//Student.m#import "Student.h"@implementation Student : NSObject-(void)setDog:(Dog *)dog{if(_dog != dog){ //判断两个变量是否相等_dog = dog; //retainCount计数器加一}}-(void)dealloc{NSLog(@"Dog dealloc");[super dealloc];}@end
//main.m#import <Foundation/Foundation.h>#import "Student.h"#import "Dog.h"int main(int argc, const char * argv[]){ <span style="white-space:pre"></span>@autoreleasepool {<span style="white-space:pre"></span>Student *stu= [Student new]; // 此时stu就是强指针,因为默认是强指针,<span style="white-space:pre"></span>//[stu release]; 不能出现这类语句,因为这是ARC<span style="white-space:pre"></span>//等stu这个在栈区的变量生命周期结束后,内存就接着被释放了,因为没有任何强指针指向这块内存区域了<span style="white-space:pre"></span>}<span style="white-space:pre"></span>return 0;}@property参数各个功能都已说明了,它这些参数对于项目开发过程中内存的管理是非常有用的,我们一定要熟练掌握它们,好了就这么多。
0 0
- 黑马程序员 --- @property参数
- 黑马程序员----@property的参数
- 黑马程序员-----@property参数学习
- 黑马程序员--ios中 property的参数
- 黑马程序员_OC基础11_@property参数
- 黑马程序员---05@property参数相关的内存管理
- 黑马程序员--IOS学习日记:09--property参数
- 黑马程序员----Objective-C学习笔记之@property参数
- 黑马程序员——OC语言加强---@property参数
- ——黑马程序员——OC中@property参数
- 黑马程序员---property用法
- 黑马程序员-oc@property
- 黑马程序员-----@property和@synthesize
- 黑马程序员---@property和@synthesize
- 黑马程序员--@property的使用
- 黑马程序员26——OC之内存管理(property参数)
- 黑马程序员--ios基础--oc内存管理--@property参数、循环引用、autorelease
- 黑马程序员--OC自学笔记---07内存管理、@property参数、@class、autorelease
- c语言二维数组在子函数中的传址
- MySQL设置数据库表为只读
- 数据结构之树
- 表达式的数据类型自动提升
- HTML5 MUI 手机预览图片,裁剪上传base64,保存数据库
- 黑马程序员 --- @property参数
- LeetCode: Add Digits
- bzoj-3011 Running Away From the Barn
- Spring学习(二)spring ioc注入的三种方式
- linux高级编程基础系列:线程间通信
- mysql到底用哪一款存储引擎呢
- JavaScript prototype详解
- 物理渲染-基于物理的光照模型
- 继承 基类和派生类指针