Objective-C 属性
2017-01-23 20:47
316 查看
属性是什么
通常意义我们使用类的属性无非两种(getter和setter),访问属性和设置属性这两种。Objective-C(一下简称OC)中的属性也离不开这两点,OC中为属性的访问控制方法(getter和setter)遵循封装的原则,我们不需要知道底层的具体实现,我们只需要按照约定定义使用即可。OC中的属性
OC中的属性定义和方法封装时考虑的因素也是非常多,一下我简单列举了一些:- OC中属性要支持引用计数,也就是内存管理等。
- 属性定义要对线程处理,考虑线程安全。
- 还需要考虑属性的作用域,private和public等。
属性的声明
@property 在类的接口定义@interface中的方法列表中定义。#import <Foundation/Foundation.h> @interface Person:NSObiect @property NSString *name; @end
其作用有:
自动生成访问方法,同时生成get和set方法;
-(void)setName:(NSString*)name; -(NSString*)name;
自动生成实例变量,编程时直接使用;
更简单调用访问方法可以使用点语法;
Persion *teacher = [[Persion alloc]init]; teacher.name = @"gavin";
原子性 我们通常定义属性的时候标注属性的原子性和非原子性.
@property(nonatomic,copy) NSString *name;
那么到底什么是原子性呢?其实原子性主要是在多线程的环境中的安全,也就是在get和set不会因为线程的并发造成影响,但是相对非原子会消耗部分性能。示例中nonatomic 是访问非原子,不加则是原子性。如下可以看出原子性的实现:
-(Type)name{ [_internal lock];//加锁 Type returnType = [[_name retain]autorelease]; [_internal unlock]; return returnType; } -(void)setName:(Type)obj{ [_internal 4000 lock]; if (name != obj){ [name release]; name = [obj retain]; } [_internal unlock]; }
如果我们使用了retain或者copy而没有使用nonatomic,那么在引用计数环境中,自动生成的getter方法中会先上锁,然后在持有原来的对象,再向对象发送autorelease方法,最后解锁并返回其值。
有时候我们定义属性不希望系统(编译器)帮我们实现getter和setter方法,那么这个时候我们怎么做呢?
@synthesize 该指令告诉编译器如果在@impementation中没有实现属性的getter和setter就自动生成之。
@interface Person:NSobject{ @property(nonatomic,strong) NSString *name; } @impementation Person @synthesize name; @end
@dynamic指令告诉编译器我们自己实现setter和getter方法,或者在运行时我们动态的添加方法,实现我们的功能
实现属性的指令
@interface Person:NSObject{ @property(nonatomic,strong) NSString *name; } @impementation Person @dynamic name; @end
从上面代码中可以看到我们在定义属性的时候使用了“strong”,那这又有什么用呢?
其中属性的读写特性有哪些?
类属性的copy又将如何实现,类继承之后属性又将如何变化?
相关文章推荐
- Objective-C中@property的所有属性详解
- Objective-c中属性的assign, retain, copy的用法
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- 黑马程序员:Objective-C 属性特性
- Objective-C --- - UITableView 二 对一进行一些属性补充(梳理总结)
- Objective-C 使用点运算符访问属性
- Objective-C中@property的所有属性详解
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- Objective-C学习笔记_属性
- Objective-C 2.0属性(Property)介绍
- Objective-C(IOS)推荐的属性读写方法
- 我的iOS开发之Objective-C第4天之属性、复合
- Objective-C 的OOP(下)-类(static)方法、实例方法、overwrite(覆写)、属性(property)
- Objective-C:属性(@property)
- Objective-C 2.0 新特性一览 - 属性
- Objective-c:属性
- Objective-C 属性参数
- Objective-C通过联合存储为类增加属性及原理解析
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)专业App,微信,网站开发 麻城