iOS-property属性介绍

Ios property属性详解

Property是Objective-c为自动生成setter和getter方法而加入的属性。其不仅可以帮助我们管理存储器还有一些其他特殊作用比如多线程控制、内存管理。

@property的关键字分为三类:原子性、操作性、内存管理。通常默认为atomic、readwrite、assign,因此其关键字最多可以设置三个。

原子性:

1)      atomic:atomic指的是原子操作,意味着同时只有一个线程可以访问实例变量,可以在多线程操作时使用以确保线程安全。

2)      nonatomic:nonatomic跟atomic正好相反,表示非原子操作,可以被多个线程同时访问。它的效率比atomic快,不能确保线程安全,一般在单线程中使用。

操作性:

1)      readwrite:表示可以同时进行读和写操作(即拥有getter和setter方法)。

2)      readonly:表示只有getter方法没有setter方法。

内存管理:

1)      assign:assign用于值类型,如int、float、double、NSInteger、CGFloat等表示单纯的复制。另外delegate一般用assign

2)      retain:在setter方法中需要对传入的对象进行引用计数加1的操作。就是对传入的对象拥有所有权使其不会被释放。

retain声明实例变量setter方法:

- (void)setRetainStr:(NSString *)RetainStr {

if (_RetainStr!=RetainStr) {

[_RetainStr release];

_RetainStr=[RetainStr retain];

}

}

3)      strong:strong是retain的一个可选的替代。和retain的意思一样表示实例变量对传入的对象拥有所有权,即强引用(strong)。

4)      weak:在setter方法中对传入的对象不进行引用计数器加1操作即对传入的对象没有所有权。当对象释放后永weak声明的实例变量之乡nil。

5)      copy:copy为深复制,指的是实例变量对传入对象的副本拥有所有权。修改副本原对象不发生改变。

时间: 2024-10-28 11:17:25

iOS-property属性介绍的相关文章

解决错误: ios property has a previous declaration

今天维护一个项目的时候,我新添加了一个库,运行的时候报错了: ios property has a previous declaration 上网查了一下没有找到思路,不过根据提示自己试了一下,原来这个项目之前就有这个库,这个错误意思是 你之前就已经定义过这个属性然后把其中的一个删除掉就可以了! 问题解决

ios @property

参考资料 http://blog.csdn.net/pingchangtan367/article/details/14000315 http://blog.csdn.net/xdrt81y/article/details/9720121 首先 @property 是声明对象用的 看这个列子, //in BaseClass.h @interface BaseClass : NSObject{ @public NSString *_name; } @property(nonatomic,copy)

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

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

iOS中绑定tableview后,变量值消失的问题

好吧,标题就以最通俗的语句命名,估计百度收录的时候,大家查找的时候会更加的方便. iOS新手,这个问题着实调试了好长时间! 由于上手就开始做大的项目,也没时间从基础做起,相信大多数小公司的开发者都是这种模式.因此很多问题都产生自很基础的错误. 项目使用mvc结构,在异步读取完数据后,NSArray中model的数据就丢失了,专业点就是内存释放了,只剩下内存地址了. 可能大家的情况和我不同,所以解决方法也不一定相同. 项目服务端是asp.net webservice,使用AFNetworking读

【转】自定义iOS的Back按钮(backBarButtonItem)和pop交互手势(interactivepopgesturerecognizer) --- 不错

原文网址:http://blog.csdn.net/joonsheng/article/details/41362499 序 说到自定义UINavigetionController的返回按钮,iOS7以后,多了一个“<” 这样的返回图标,而目前主流的应用,都是只保留了“<”,而去掉了文字,那么怎么样自定义一个自己的“<"按钮,或者用系统的“<”,但不要文字呢? 1.设置中的返回按钮(带文字) 2.音乐中播放时(不带文字) 1.直接上答案 [objc] view plain

ios之获取当前系统版本/UUID标识/名字/型号

1.识别当前系统版本,由于ios7 的statusBar 是悬空的,所以需要做下适配这样会避免屏幕下面出现白条,针对不同的版本显示内容布局不同 <pre name="code" class="objc"> int stateHeight = 0; if ([UIDevice currentDevice].systemVersion.intValue>=7) { stateHeight = 20; } 2. UIDevice 点开这个类里面还有其他系

iOS runtime探究(五): 从runtime开始深入weak实现机理

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

iOS runtime探究(四): 从runtiem开始实践Category添加属性与黑魔法method swizzling

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

IOS - [UIDevice currentDevice] name/model/localizedMode/systemName/systemVersion...../userInterfaceIdiom

+ (UIDevice *)currentDevice; @property(nonatomic,readonly,retain) NSString    *name;              // e.g. "My iPhone" @property(nonatomic,readonly,retain) NSString    *model;             // e.g. @"iPhone", @"iPod touch" @prop