为啥NSString的属性要用copy而不用retain
之前学习生活中,知道NSString的属性要用copy而不用retain,可是不知道为啥,这两天我研究了一下,然后最终明确了.
详细原因是由于用copy比用retain安全,当是NSString的时候,其有用copy和retain都行,当用NSMutableString,那么就要用copy,NSMutableString的值不会被改动,而用retain的时候,NSMutableString的值会被改动,详细情况,能够看以下的代码:
#import <Foundation/Foundation.h> //协议有两种方式,第一是以ing结尾形式,第二,以delegate结尾形式
@interface person : NSObject<NSCopying>
@property (nonatomic,copy)NSString * name;
person * p = [[person alloc]init];
NSMutableString * name = [[NSMutableString alloc]initWithString:@"hello"];
p.name = name;
[name appendString:@" word"];
NSLog(@"%@",p.name);
打印后结果是
2014-07-05 17:08:44.170 DepthCopy[1399:303] hello
Program ended with exit code: 0
我们能够发现打印结果还是hello;
再看以下用retain
#import <Foundation/Foundation.h> //协议有两种方式,第一是以ing结尾形式,第二,以delegate结尾形式
@interface person : NSObject<NSCopying> @property (nonatomic,retain)NSString * name;
person * p = [[person alloc]init];
NSMutableString * name = [[NSMutableString alloc]initWithString:@"hello"];
p.name = name;
[name appendString:@" word"];
NSLog(@"%@",p.name);
打印结果是:
2014-07-05 17:13:19.531 DepthCopy[1412:303] hello word
Program ended with exit code: 0
我们能够发现结果被改变了,成为了hello word;
所以,由以上代码,能够看出copy比retain安全,也就能明确为啥NSString的属性要用copy而不用retain了;
为啥NSString的属性要用copy而不用retain的更多相关文章
- 成员变量NSString类型指针的属性为什么用copy(属性)
创建一个分类Person设置属性@property(nonatomic,strong) NSString * name; 在- (void)viewDidLoad 中打印测试 name的属性是stro ...
- block作为类的属性时用copy
1. block作为类的属性时用copy Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的 <栈 :由系统维护的局 ...
- nsmutablestring 属性声明为copy程序崩溃了
obj.mutableStr = (NSMutableString *)[[NSMutableString alloc] initWithString:@"Hello"]; NSL ...
- [iOS基础控件 - 6.12.3] @property属性 strong weak copy
A.概念 @property 的修饰词 strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign) 默认情况所有指针都是强指针 ...
- ios开发之NSString用strong还是用copy?
代码如下: 1,声明 @property(nonatomic,strong)NSString *firstName; @property(nonatomic,copy)NSString *second ...
- 父类属性值的copy
最近开发中遇到这样一个问题将父类的属性值copy到子类中,从而对子类添加一些其他属性. 父类: package com.jalja.org.jms.test01; import java.util.D ...
- iOS之NSString类型为什么要用copy修饰
在开发的过程中,只知道NSString类型最好用copy修饰而不能用strong,但是不知道为什么,今天了解了下,总算搞明白了. 如下所示,当修饰符为copy时,因为NSMutableString是N ...
- OC加强-day06
#program mark - 08 NSMutableDictionary的使用 [掌握] "/08 NSMutableDictionary的使用/1_练习 "练习 1.小明的身 ...
- 【转】 NSString什么时候用copy,什么时候用strong
原文: http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有 ...
随机推荐
- 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码
[实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...
- 批量创建prefab
using UnityEngine; using System.Collections; using UnityEngine.UI; using System.IO; using UnityEdito ...
- Git 笔记二-Git安装与初始配置
git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...
- Linux下Ant的安装
OS:CentOS6.3 ant版本:apache-ant-1.9.2-bin 第1步:下载ant apache-ant-1.9.2-bin.tar.gz 第2步:解压 tar -zxvf apach ...
- HTML与CSS入门——第二章 发布Web内容
知识点: 1.使用文本编辑器创建一个基本的HTML文件的方法 2.使用FTP将文件传送到你的Web服务器的方法 3.文件在Web服务器上应该存储的位置 4.在没有Web服务器的情况下分发Web内容的方 ...
- 自制获取data-自定义属性
jQuery.fn.dataset = function(attr, val) { // 获取数据集 if (arguments.length == 0) { var dataset = {}; jQ ...
- Android Activity和intent
- jQ全选效果
<ul id="list"> <li><label><input type="checkbox" value=&quo ...
- 看到的一些js小知识
向数组结尾添加元素高效方法: var arr = [1,2,3]; arr[arr.length] = 4 头部: var a = [1,2,3]; a.concat(4,5); // 1,2,3,4 ...
- TRI 解题报告
题目大意: 在一个平面上有N(N <= 1000)个点,其中任意三点不共线,求这些点组成的三角形的面积和每和三角形内部含的点数的个数和. 数据范围: 20%的数据 N <= 50, 30% ...