Objective-C property属性解析

@interface …
@property (原子性,可写性,内存管理) id name;
@end

原子性:    nonatomic, atomic   默认atomic

可写性:    readwrite, readonly  默认readwrite

内存管理: assign, retain, copy  默认assign

默认值:

因为这几个属性都有默认值,所以可以任意指定某个属性或者完全不指定:

@property id name; //等价于下一行:
@property (atomic, readwrite, assign) id name;

可写性:

@property id name 会生成两个setter,getter两个访问接口

-(void) setName:(id)name;
-(id) name;

因此readonly说的是只生成getter函数不生成setter函数,默认值说的是两者都生成

内存管理:

assign 说的是接口任何时候都不会修改对象引用;

retain 说的是调用setter时会release前一个对象再retain新对象;调用getter时会retain;

copy   说的是调用setter时会copy新对象, release 前一个对象;调用getter时会retain;

@property (assign) id name; 等价于

-(void) setName: (id) aName
{
  self.name = aName;
}

-(id) name
{
  return self.name;
}

@property (retain) id name; 等价于

-(void) setName: (id) aName
{
  if ([self.name retainCount > 0])
  {
    [self.name release];
  }

  [aName retain];
  self.name = aName;
}

-(id) name
{
  [self.name retain];
  return self.name;
}

@property (copy) id name; 等价于

-(void) setName: (id) aName
{
  if ([self.name retainCount > 0])
  {
    [self.name release];
  }

  self.name = [copy aName];
}

-(id) name
{
  [self.name retain];
  return self.name;
} 

结论:

除了assign属性,使用时必须release对象,否则会内存泄漏!那这样也太麻烦了,感谢ARC

时间: 2024-07-29 15:25:48

Objective-C property属性解析的相关文章

CAGradientLayer的一些属性解析-b

CAGradientLayer的一些属性解析 iOS中Layer的坐标系统: 效果: - (void)viewDidLoad { [super viewDidLoad]; CAGradientLayer *colorLayer = [CAGradientLayer layer]; colorLayer.frame = (CGRect){CGPointZero, CGSizeMake(200, 200)}; colorLayer.position = self.view.center; [self

盘点iOS开发中property属性常用关键字

一.关键字说明 1.@synthesize:自动生成成员变量相应的存取方法,可以使用点语法操作该变量的存取. 2.@implementation:  表明类的实现  ,以@end 结束. 3.self  :类似java语言当中的this ,是隐藏指针  指向接受消息的对象的指针 .消息所调用的方法使用该指针参数查找它要使用的实例. 4.super : 调用父类的方法 .    self = [ super init];  判断是否可以成功初始化 如果父类成功初始化 那么将会赋值给 self  ,

css float 属性解析

  float 属性的定义:使元素在哪个方向浮动   默认值为:none 注意:浮动元素会生成一个块级框,而不论它本身是何种元素 HTML代码: <body> <div class="main"> <div class="d" id="d1">框1</div> <div class="d" id="d2">框2</div> <di

ios的@property属性和@synthesize属性(转)

当你定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,,所以Xcode提供了@property 和@synthesize属性,@property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现. 如下,新建一个基于"Command Line Tool"的项目,名为"property",再新建一个Student类, 传统的写法是: Student.h [cpp] view plaincopy //

[iOS基础控件 - 6.12.3] @property属性 strong weak copy

A.概念 @property 的修饰词 strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign) 默认情况所有指针都是强指针 使用 "__weak" 修饰的指针是弱指针 ARC准则:只要没有强指针指向,对象就会被销毁 @property属性的用法 * weak(assign) :  代理\UI控件* strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)* copy : 字符串 * assign

property属性[Python]

一.property解释 根据文档资料解释: property([fget[, fset[, fdel[, doc]]]]) Return a property attribute for new-style classes (classes that derive from object) 使用这个内建函数时,类必须继承object,才有效. property有可选参数fget, fset, fdel, doc.fget是获取值函数,fset是设置函数值,fdel是删除函数,doc文档说明.

IIS属性解析

IIS属性解析 KeyType[0] =IisWebVirtualDir // Schema类名表明操作的目录类型 // [虚拟目录] Path[0] =D:/WebSiteTest // 虚拟目录|本地路径 // .NET对应属性如下,其中de为虚拟目录对应的DirectoryEntry对象 de.Properties["Path"][0] = 路径字符串 AccessFlags[0] =513 // 虚拟目录|读取-写入 // 1. 虚拟目录|应用程序设置|执行权限为"无

OC基础之-Property(属性)和点语法

学习属性之前回忆一下之前学到的setter方法和getter方法: (1)setter方法的作用:用来为单一的实例变量赋值(只能是一个实例变量,多了的叫做get方法) (2)setter方法的写法标准: - 号方法,  无返回值,   名字以set开头+要设置的变量的实例变量名(首字母需大写):(setter方法有且只有一个参数)+参数的类型(和实例变量的类型相同)+参数名(和实例变量名相同) (3)getter方法的作用:用来获取单一实例变量的值. (4)getter方法的写法标准: - 号方

@property属性关键字

关于@property属性关键字使用注意:* weak(assign) :  代理\UI控件* strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)* copy : 字符串* assign : 非对象类型(基本数据类型int\float\BOOL\枚举\结构体)