OC属性property

声明property语法为@property(参数1,参数2,参数3)类型 名字;

例如:@property (assign)int age;

相当于定义了下面俩个方法:

- (int) age;

- (void) setAge:(int)newAge;

在实现文件.m中我们只要添加如下一行代码:

@systhesize age;

就相当于实现了.h文件中的get和set方法。

属性关键字:

@property后面的()内可以配置一些参数,下面给出可配置的参数:

1、读写属性:即控制了属性是否存在设置器的方法。这些参数之间是互斥的。

Readwrite(默认):表明属性是可读写的。

Readonly:只读。

2、setter语意:

Assign(默认):一般用来处理基础类型,默认的。

Copy:指定应该使用对象的副本,前一个值发送一条release消息。基本上像retain,但是没有增加引用计数,是分配一块新的内存来放置它。在进行设置的时候,使用copy来复制参数,对原值进行release。

推荐做法:NSString用copy,delegate用assign(一定要用assign),其他对象类型用retain,基本数据类型用assign(默认的)。

3、原子性控制:

Atomic(默认):为了保证多线程情况下编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步。

Nonatomic:不提供对多线程的保护,如果该对象无需考虑多线程情况。

推荐:一般都可以使用nonatomic参数。

4、strong和weak

Strong和weak是ios5中由ARC(自动内存管理机制)引入的新的对象变量属性。

Strong:用来修饰引用的属性。

@property(strong) Myclass *myobject;

相当于

@property(retain) Myclass *myobject;

Weak:用来修饰弱引用的属性,当弱引用的对象被释放后,该对象将被自动赋予nil值。

@property(weak) Myotherclass *delegate;

相当于

@property(assign) Myotherclass *delegate;

强引用和弱引用的区别在于:强引用也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示于列表中,则此对象会被从内存中释放。弱引用除了不决定对象的存亡外,其他与强引用相同。

时间: 2024-12-10 02:37:30

OC属性property的相关文章

iOS runtime探究(三): 从runtime开始理解OC的属性property

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

iOS开发OC基础:OC属性的一些概念和基本使用

一.属性简介 //属性是OC2.0之后新出的一种语法,能让我们快速的生成setter以及getter方法,大大简化代码 二.如何定义一个属性 //@property 属性关键字,用来定义属性 //NSString * 属性的类型 //name 属性的名字. //@property 只是生成的setter以及getter方法的声明.@property NSString *name; 三.属性的使用注意事项//如果在.m文件中我们自己实现了setter以及getter方法,则编译器就不会再帮我们生成

Objective-C基础5 : 属性@property

1.类里面经常有一些变量需要进行set和get操作,OC中提供了方便的属性@property来替换set和get方法,这样能减少频繁且简单的重复代码.如下代码: @interface Person : NSObject @property NSString* strName; @property int nAge; @end @implementation Person @synthesize strName; @synthesize nAge; @end 通过在类声明变量前面添加@proper

作为笔记:Objective-C属性property的一些认识

在头文件中声明: @property (nonatomic,strong) NSString * str; 在oc中,这一行代码表示一个名为str的属性. 在实现文件.m中声明: @synthesize str; 在oc中类中声明了这一句话就会自动生成两个方法(生成属性的getter和setter),一个属性,如果实现了属性(在.m文件中)则会生成一个实例变量. 在类别中声明了了属性则会自动生成两个方法,则必须实现setter和getter,类别中属性要用@dynamic,但是不会生成实例变量.

属性(property)与成员变量(ivar)

类内使用成员变量{}, 类外使用属性@property /*********** --- Person.h */ @interface Person : NSObject { NSString *_name; } @property (nonatomic, copy) NSString *sex; @property (nonatomic, assign) int age; - (void)getPropertyAndiVar; @end /*********** --- Person.m */

OC属性总结

<pre name="code" class="cpp">    setter 方法的作用:为单一的变量赋值. setter 方法规范写法:1.- 号方法,无返回值. 名字以set开头 + 要设置的变量的实例变量名(首字母要大写):(setter方法有且只有一个参数) + 参数的类型(和实例变量类型相同) + 参数名(和实例变量名相同) getter 方法的作用:获取单一的实例变量的值. getter 方法的命名规范: - 号方法,有返回值 (返回值类型

分析Runtime的属性Property

一.介绍 在OC中我们可以给任意的一个类以@property的格式声明属性,当然对于这个属性也会采用某一些属性关键字进行修饰,那么属性的真正的面目是啥样子的呢?其实,runtime源码中可以看到,property是一个结构,如下所示,只不过苹果为这个结构体另外定义了一个结构体指针. //属性结构体指针 typedef struct objc_property *objc_property_t; 二.函数 正如我们所知,MJExtension是一个非常流行的json解析框架,其内部对对象的每一个属

python静态属性----property

1.什么是静态属性property property是一种特殊的属性,访问它的时候会执行一段功能(函数)然后返回值. 在使用者直接要某个结果的时候,就需要用到了静态属性. 2.例子 计算BMI指数. class People: def __init__(self,name,tz,hit): self.name=name self.tz=tz self.hit=hit @property def bmi(self): return self.tz / (self.hit**2) p=People(

实例变量(instance var)与属性(@property)的关系

实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和属性重复输入的麻烦.而使用@synthesize可以改变_name名称.@property和@synthesize不必成对出现. @property name:指示编译器自动合成setter和getter方法,setter方法名即setName,而getter方法名即name.@property后面