1.NSString类型的属性为什么用copy

NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic,strong) NSString *nameStrong;

@property(nonatomic,copy) NSString *nameCopy;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad]; NSMutableString *muStr = [NSMutableString stringWithString:@"zhangsan"];
self.nameCopy = muStr ;
self.nameStrong = muStr;
NSLog(@"可变字符串修改前nameStrong= %@ nameCopy=%@",self.nameStrong,self.nameCopy);
[muStr appendString:@"feng"];
NSLog(@"可变字符串修改后nameStrong= %@ nameCopy=%@",self.nameStrong,self.nameCopy); }
打印结果如下:

2016-03-15 10:10:25.772 string[619:12684] 可变字符串修改前nameStrong= zhangsan nameCopy=zhangsan


2016-03-15 10:10:25.773 string[619:12684] 可变字符串修改后nameStrong= zhangsanfeng nameCopy=zhangsan

可变字符串改变时,strong修饰的字符串也跟着改变了,而copy修饰的字符串没有改变

总结:用strong修饰的字符串,当NSMutableString的字符串给他赋值时,NSMutableString的字符串变了,它也会跟着改变,因为stong只是指针的引用,引用计数加1。

用copy修饰的字符串,不会随着源头的改变而改变,因为copy会复制一份。

如果源头的字符串是不可变的,那么用copy和strong是一样的,因为源头是不可变的字符串嘛,所以用copy还是strong看你的需要了,想让他随着源头改变就用strong,不想改变有用copy,一般不会让它改变,所以安全起见,字符串会用copy

2.代理.手动拖线的控件为什么用weak

self->对象(比如person对象)->代理->self(设置代理时:self.delegate=self);

会造成循环引用, 使用weak表明该属性定义了一种非拥有关系,为这种属性设置新值时,既不保留新值也不会释放旧值。

首先手动拖线的控件用weak不是因为会造成循环引用,self->view->sunViews->控件,这样已经有个强引用了,如果控件用strong,self->控件,这个控件有两个强引用,释放时要剪断两个对他的引用,如果有一个没有释放,这个控件就不能释放了,当然用strong也没有错,还更加安全呢。

3.block为什么用copy

block的方法内容是在栈区的,首先栈区是系统自动管理的,随时会清除内存,,再访问时可能会造成野指针,copy关键字会把block的内容复制到堆区,堆区由程序员自己管理。

@property中的copy.strong.weak总结的更多相关文章

  1. @property中的copy关键字

    1.@property中的copy的作用 防止外界修改内部的值 @interface Person : NSObject @property (nonatomic, retain) NSString ...

  2. 对于atomic nonatomic assign retain copy strong weak的简单理解

    atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作 1)atomic 设置成员变量的@property属性时,atomic是默认值,提供多线程安全 在多线程环 ...

  3. iOS知识基础篇--@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain详解

    一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonat ...

  4. iOS中属性 (nonatomic, copy, strong, weak)的使用 By hL

    以下内容来自Stackflow的详解 1.Nonatomicnonatomic is used for multi threading purposes. If we have set the non ...

  5. ios 内存管理与property copy strong weak assign

    - (void)fun{  NSString* str = [[NSString alloc] initWithString:@"string"];  NSLog(@"% ...

  6. assign,copy,strong,weak,nonatomic的理解

    举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段 ...

  7. ios copy/strong/weak..使用总结

    总结 关于属性的这些选项的学习,做一下总结: 所有的属性,都尽可能使用nonatomic,以提高效率,除非真的有必要考虑线程安全. NSString:通常都使用copy,以得到新的内存分配,而不只是原 ...

  8. ios OC 关键字 copy,strong,weak,assign的区别

    一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(stron ...

  9. assign,copy,strong,weak,nonatomic的具体理解

    例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段内存 ...

随机推荐

  1. Linux.NET实战手记—自己动手改泥鳅(上)

    各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...

  2. Dubbo 备注

    Dubbo是阿里开源的一款服务治理中间件,主要包含如下节点: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. ...

  3. web前端的春天 or 噩梦

    「 微信应用号可以做什么」 简单说,微信"小程序"可以为开发者提供基于微信的表单.导航.地图.媒体和位置等开发组件,让他们在微信的网页里构建一个 HTML 5 应用.同时微信还开放 ...

  4. [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建

    一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...

  5. Android Studio2.1.2 Java8环境下引用Java Library编译出错

    转载请注明出处:http://www.cnblogs.com/LT5505/p/5685242.html 问题:在Android Studio2.1.2+Java8的环境下,引用Java Librar ...

  6. (实例篇)PHP实现HTTP断点续传的方法

    PHP实现HTTP断点续传的方法. <?php /** * PHP-HTTP断点续传实现 * @param string $path: 文件所在路径 * @param string $file: ...

  7. Jquery

    使用时jquery先引进jquery文件包 <script src="jquery-1.11.2.min.js"></script> 一个页面有多个文件jq ...

  8. 菜鸟理解的工厂模式(Factory Pattern)是什么样子的?

    直接开始说了,不浪费园友宝贵的时间! 什么是工厂模式? 在学习前,先问一下:"它是什么?". 工厂模式,它是项目里面常用的设计模式之一. 它是属于创建型模式,简单的理解创建型模式就 ...

  9. 后HTML5时代

    十二年前,无论多么复杂的布局,在我们神奇的table面前,都不是问题:十年前,阿捷的一本<网站重构>,为我们开启了新的篇章:八年前,我们研究yahoo.com,惊叹它在IE5下都表现得如此 ...

  10. 【Win10应用开发】签名与验证

    对数据进行签名和验证,是为了防止数据被“盗版”.比较常规的做法是通过公钥进行验证. 算法上多用SAH_xxxx,就是哈希算法.由于MD5后来被发现存在“非唯一性”,你会发现现在很多一些下载的文件验证都 ...