iOS SDK具体解释之NSCopying协议
原创blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=contents
欢迎关注我的iOS SDK具体解释专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:NSCopy协议是对对象进行拷贝的协议。Copy后的对象和原对象是两个对象,要分开考虑其生命周期。Copy后的对象应当对原始对象不依赖,不影响。
使用NSCopy协议仅仅须要实现一个方法copyWithZone:
就可以
举例
OC
@interface MyModel:NSObject<NSCopying>
@property (copy,nonatomic)NSString * name;
@property (nonatomic)int age;
@end
@implementation MyModel
-(instancetype)copyWithZone:(NSZone *)zone{
MyModel * copyedModel = [[self.class allocWithZone:zone] init];
copyedModel->_name = self.name;
copyedModel->_age = self.age;
return copyedModel;
}
@end
使用
MyModel * model = [[MyModel alloc] init];
model.name = @"wenchen";
model.age = 24;
MyModel * copyedModel = [model copy];
然后在LLDB中能够查看对象地址,能够看到是两个独立的对象
(lldb) po copyedModel
<MyModel: 0x7f958971b690>
(lldb) po model
<MyModel: 0x7f958971b5b0>
Swift
class MyModel:NSObject,NSCopying{
func copyWithZone(zone: NSZone) -> AnyObject {
let copyedModel = self.dynamicType()
return copyedModel
}
required override init() {
}
简单測试
let model1 = MyModel()
let model2 = model1.copy()
(lldb) po model1
<SWTest.MyModel: 0x7fafe0476f40>
(lldb) po model2
<SWTest.MyModel: 0x7fafe0476ec0>
这里顺便提一下,怎样在Swift中声明一个OC中的copy 属性
@NSCopying var name:NSString?
使用关键字 @NSCopying
iOS SDK具体解释之NSCopying协议的更多相关文章
- iOS SDK具体解释之UIDevice(系统版本号,设备型号...)
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 blog.csdn.net/column/details/huangwenchen ...
- ios--集成支付宝钱包支付iOS SDK的方法与经验
文/胖花花(简书作者)原文链接:http://www.jianshu.com/p/fe56e122663e著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 没想到,支付宝的SDK是我目前 ...
- 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序
之前已经折腾过用Xcode开发OS X的程序了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序. 1.从iOS Developer Library中找 ...
- 集成支付宝钱包支付ios SDK的方法和经验
没想到,支付宝的SDK是我目前用过的所有第三方SDK中最难用的一个了. 下载 首先,你要想找到这个SDK,都得费点功夫.现在的SDK改名叫移动支付集成开发包了,下载页面在 这里 的 “请点此下载集成开 ...
- 集成支付宝钱包支付 iOS SDK 的方法与经验
下载 首先,你要想找到这个SDK,都得费点功夫.现在的SDK改名叫移动支付集成开发包了,下载页面在 这里 (http://t.cn/8ksiklD)的 “请点此下载集成开发包(http://t.cn/ ...
- 设计模式之原型模式(深入理解OC中的NSCopying协议以及浅拷贝、深拷贝)
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.原型模式其实就是从一个对象再创建另一个可定制的对象,而且不需知道任何创建的细节. 比如说,有一个Person类,有firstN ...
- 李洪强iOS之集成极光推送一iOS SDK概述
李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...
- iOS SDK中使用NSXMLParser解析XML(iphone网络篇三)
iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档.NSXMLParser在处理XML文档的过程中当遇到一些要素(元素.属性.CDATA块.评论 ...
- XE6移动开发环境搭建之IOS篇(9):配置XE6的IOS SDK(有图有真相)
网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 1.开启PAServ ...
随机推荐
- 洛谷——P1134 阶乘问题
P1134 阶乘问题 题目描述 也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 ...
- Web目录全能扫描工具DirBuster
Web目录全能扫描工具DirBuster Kali Linux提供的目录扫描工具DirBuster支持全部的Web目录扫描方式.它既支持网页爬虫方式扫描,也支持基于字典暴力扫描,还支持纯暴力扫描. ...
- 3Sum Smaller -- LeetCode
Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...
- [BZOJ 1143] 祭祀river
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1143 Solution: 一道最长反链的模板题 由Dilworth定理可知:最小链覆盖数 ...
- [BZOJ 1833] 数字计数
Link: BZOJ 1833 传送门 Solution: 比较明显的数位DP 先预处理出1~9和包括前导0的0的个数:$pre[i]=pre[i-1]*10+10^{digit-1}$ (可以分为首 ...
- [OpenJudge8786][暴力DP]方格取数
方格取数 总时间限制: 1000ms 内存限制: 65536kB [描述] 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): ...
- Java高级架构师(一)第13节:Spring MVC实现Web层开发
package com.sishuok.architecture1.customermgr.web; import org.springframework.beans.factory.annotati ...
- 在energia中添加新的库
很多时候energia提供的库不能够满足我们的需要,这个时候我们就要自己添加库到energia中.方法如下: 在energia目录下找到hardware目录 选择对应的单片机型号文件夹进入 进入lib ...
- linux-去重-uniq
uniq : 默认(去重) | -d(显重) | -u(删重) 语法:uniq [选项] 文件 选项 -c或--count 在每列旁边显示该行重复出现的次数 -d或--repeat 仅 ...
- zk watch机制及创建node机制
Watch(监视) 当指定的znode或znode的子数据更改时,监视器会显示通知.你只能在 get 命令中设置watch. 语法 get /path [watch] 1 示例 get /FirstZ ...