惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
Martin Fowler
Martin Fowler
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
B
Blog
U
Unit 42
B
Blog RSS Feed
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
腾讯CDC
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
博客园 - 聂微东
MyScale Blog
MyScale Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
Engineering at Meta
Engineering at Meta

博客园 - 沙加

前端设计模式之 MPVC Part 3 前端设计模式之 MPVC Part 2 前端设计模式之 MPVC Part 1 App Engine 缓存与数据一致性 常用跨浏览器效果 同步请求真的有那么恐怖? Google Closure 的单元测试纪要 双飞翼布局的选区问题 一个 JS 面试题目 HTML 5 之旅 part 1 - 无头苍蝇 bind, delegate, live 三者的区别 Objective-C 学习笔记 - part 12 - 多线程 Objective-C 学习笔记 - part 11 - 错误处理 Objective-C 学习笔记 - part 10 - 选择器 Objective-C 学习笔记 - part 9 - 静态标记的类型 Objective-C 学习笔记 - part 8 - 快速枚举 Objective-C 学习笔记 - part 7 - 相关引用 Objective-C 学习笔记 - part 6 - 类别与扩展 Objective-C 学习笔记 - part 4 - 协议
Objective-C 学习笔记 - part 5 - 申明属性
沙加 · 2011-08-16 · via 博客园 - 沙加

本节讨论了如何使用申明属性与系统内部实际使用了自动生成的方法用作属性访问的接口,由此引入的实例变量管理等等问题。

使用申明属性 declared properties 可以方便地实现访问器方法 accessor methods.

申明属性为访问器方法行为提供一种清晰,明确的规范。

编译器帮你将申请属性扩展为访问器方法实现以短减你书写的代码量。

申明属性也是一类标识符并且有自己的作用域,因此编译器可以探测到未申明的属性。

语法:
@property(attributes) type name;

例如:
@interface MyClass : NSObject
{
    float value;
}
@property float value;
@end

setter 的几种语义:
 assign: 简单赋值
retain: 前一个值会收到一个 release 消息。
copy: 复制

如果你不使用 垃圾回收器,则需要指定 assign/retain/copy,否则会收到一个警告。

可以指定原子性和非原子性。

如果是 retain/copy, 则在未指定 automic 时会自动使用一个内部锁来实现原子性。

如你使用垃圾回收机制,则可以指定引用是强引用还是弱引用,不过这个是非正式的。

@synthesize firstName, lastName, age = yearsOld;

指定了实例变量名的 属性申明。

不论你是否指定实例变量名,这个变量都只对当前类有效而不对父类可见。

@dynamic

关于使用 @properties

任何 Object-C 的类都可以申明。

可以在子类中重新申明,而且 modifier

copy:
使用这个 property 在某些情形下比较有用,比如 要赋值一个 mutable 的 string 这样保证后续的修改不会影响到这个已赋值的变量。

非 asign 的 property 应该
 - (void)dealloc {
    [property release];
    [super dealloc];
}
或者(新版本,因为无法直接访问实例变量)
- (void)dealloc {
    [self setProperty:nil];
    [super dealloc];
}

子类中的 property 可以使用 writable 盖掉父类中的 readonly 属性。

不同的属性对性能的影响。

在旧环境中 @synthesize 属性的需要手动申明实例变量,而新系统中则不需要,系统会 自动帮你做。

本节涉及到不同类型的属性及由此带来的赋值方式差异,运行时性能,操作原子性,线程安全,向后性兼容性等问题,需要在使用仔细参照。