strong与weak

如果把一个属性声明为weak

编译器做了一件事,只是给成员变量赋值,而没有对引用计数进行处理

set方法:

-(void)setName:(NSString *)name

{

  if (_name != name)

  {

         _name = name;

       }

}

如果把一个属性声明为strong

实际上编译器做了两件事,1、处理了引用计数 2、对成员变量赋值

set方法:

-(void)setName:(NSString *)name

{

  if (_name != name)

  {

          //将旧的对象引用计数器减一

   [_name release];

          //将新的对象引用计数加一

   [name retain];

          //赋值给成员变量

         _name = name;

       }

}

以下内容为转载,出处不详。

assign:指定setter方法用简单的赋值,这是默认操作。你可以对标量类型(如int)使用这个属性。你可以想象一个float,它不是一个对象,所以它不能retain、copy。

retain:指定retain应该在后面的对象上调用,前一个值发送一条release消息。你可以想象一个NSString实例,它是一个对象,而且你可能想要retain它。

copy:指定应该使用对象的副本(深度复制),前一个值发送一条release消息。基本上像retain,但是没有增加引用计数,是分配一块新的内存来放置它。

readonly:将只生成getter方法而不生成setter方法(getter方法没有get前缀)。

readwrite:默认属性,将生成不带额外参数的getter和setter方法(setter方法只有一个参数)。

atomic:对于对象的默认属性,就是setter/getter生成的方法是一个原子操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter的情况,相关于方法头尾加了锁一样。

nonatomic:不保证setter/getter的原子性,多线程情况下数据可能会有问题。

时间: 2024-07-31 04:08:20

strong与weak的相关文章

iOS开发:strong、weak等详解

  现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained功能差不多(有点区别,等下会介绍,这两个新 关键字与assign类似).在iOS5中用这些新的关键字,就可以不用手动管理内存了,从java等其它语言转过来的程序员非常受用. strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切 @property (nonatomi

@property中strong跟weak的区别

strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切   @property (nonatomic, strong) NSString *string1;    @property (nonatomic, strong) NSString *string2;     有这样两个属性,    @synthesize string1;    @synthesize string2;       猜一下下面代码将输出什么结果?   self.string1 = @"Str

iOS开发系列--无限循环的图片浏览器

概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前很有必要说一下UIView的内容.在上一篇

iOS面试必看,最全梳理

原文 序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了.今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态平衡.矫情一下,言归正传,我奉献一下,为iOS应聘者梳理一下面试题,希望能助一臂之力! OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错的编程

手把手教你ARC——iOS/Mac开发ARC入门和使用

本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论.请不要将本文的部分或全部内容用于商用,谢谢合作. 欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by-hand/ 本文适合人群:对iOS开发有一定基础,熟悉iOS开发中内存管理的Reference Counting机制,对ARC机制有听闻很向往但是一直由于种种原因没有使用的童鞋.本文将从ARC机理入手对这个解放广大iOS开发者

编程语言的一些概念

编程语言分类 编程语言的常见分类是按照类型来分的,比如强类型语言,弱类型语言,静态类型语言,动态类型语言等,要理清编程语言的分类,必须首先弄清楚什么是类型. 和类型相关的一些概念 Latent typing是一种你不需要在源码中的明确的声明你的变量的类型的类型系统.而与之相反的是manifest typing,它需要你在源码中明确的声明你的变量的类型. Static typing(静态类型)类型系统指的是你的源码中的任何独立的表达式都必须有类型,不管它的类型是直接写在源码中,或者是通过编译器来推

ARC入门

手把手教你ARC--iOS/Mac开发ARC入门和使用 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论.请不要将本文的部分或全部内容用于商用,谢谢合作. 欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by-hand/ 本文适合人群:对iOS开发有一定基础,熟悉iOS开发中内存管理的Reference Counting机制,对ARC机制有听闻很向往但是一直由于种种原因没有使用

iOS代码规范

这篇规范一共分为三个部分: 核心原则:介绍了这篇代码规范所遵循的核心原则. 通用规范:不局限于iOS的通用性的代码规范(使用C语言和Swift语言). iOS规范:仅适用于iOS的代码规范(使用Objective-C语言). 一. 核心原则 原则一:代码应该简洁易懂,逻辑清晰 因为软件是需要人来维护的.这个人在未来很可能不是你.所以首先是为人编写程序,其次才是计算机: 不要过分追求技巧,降低程序的可读性. 简洁的代码可以让bug无处藏身.要写出明显没有bug的代码,而不是没有明显bug的代码.

iOS开发中各种关键字的区别

一.一些概念 浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. atomic是Objc使用的一种线程保护技术, 基本上来讲,是防止在写未完成的时候被另外一个线程读取, 造成数据错误.而这种机制是耗费系统资源的, 所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择. 二.各种属性的解析 weak: <修饰Object类型,A