所谓copy

浅层复制:只复制指向对象的指针,而不复制引用对象本身。

深层复制:复制引用对象本身

copymutableCopy的区别在于它们的返回值是其中前者是不可变的类,后者是可变的类.

不管被复制的对象是不可变的还是可变的,copy的返回值类型始终是不可变类型。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
   
    NSString *str1 = @"hello";
    NSString *str2 = [str1 copy];//指针copy
    NSString *str3 = [str1 mutableCopy];//深copy
    NSLog(@"str1 = %@  str1 = %p",str1,str1);
    NSLog(@"str2 = %@  str2 = %p",str2,str2);
    NSLog(@"str3 = %@  str3 = %p",str3,str3);
 
    NSMutableString *mutableStr2 = [str1 copy];//指针copy
    NSMutableString *mutableStr3 = [str1 mutableCopy];//深copy
    NSMutableString *mutableStr4 = [str1 mutableCopy];
    [mutableStr4 appendString:@"-OC"];
    NSLog(@"mutableStr2 = %@  mutableStr2 = %p",mutableStr2,mutableStr2);
    NSLog(@"mutableStr3 = %@  mutableStr3 = %p",mutableStr3,mutableStr3);
    NSLog(@"mutableStr4 = %@  mutableStr4 = %p",mutableStr4,mutableStr4);
    
    return 0;
}
</pre><pre name="code" class="objc"><pre name="code" class="html">2015-11-06 11:09:03.589 msDemo[1301:43528] str1 = hello  str1 = 0x100001030
2015-11-06 11:09:03.590 msDemo[1301:43528] str2 = hello  str2 = 0x100001030
2015-11-06 11:09:03.590 msDemo[1301:43528] str3 = hello  str3 = 0x1001145c0
2015-11-06 11:09:03.590 msDemo[1301:43528] mutableStr2 = hello  mutableStr2 = 0x100001030
2015-11-06 11:09:03.590 msDemo[1301:43528] mutableStr3 = hello  mutableStr3 = 0x1001149d0
2015-11-06 11:09:03.590 msDemo[1301:43528] mutableStr4 = hello-OC  mutableStr4 = 0x1001148d0


 
</pre><pre name="code" class="objc"><pre name="code" class="objc">2015-11-06 11:14:15.262 msDemo[1309:45570] str1 = hello  str1 = 0x100001030
2015-11-06 11:14:15.330 msDemo[1309:45570] str2 = hello  str2 = 0x100001030
2015-11-06 11:14:15.331 msDemo[1309:45570] str3 = hello  str3 = 0x100206ba0
2015-11-06 11:14:15.331 msDemo[1309:45570] mutableStr2 = hello  mutableStr2 = 0x100001030
2015-11-06 11:14:15.331 msDemo[1309:45570] mutableStr3 = hello  mutableStr3 = 0x100206eb0
2015-11-06 11:14:15.331 msDemo[1309:45570] mutableStr4 = hello-OC  mutableStr4 = 0x100207030


 
</pre><pre name="code" class="objc"><pre name="code" class="objc">2015-11-06 11:14:41.343 msDemo[1313:45789] str1 = hello  str1 = 0x100001030
2015-11-06 11:14:41.344 msDemo[1313:45789] str2 = hello  str2 = 0x100001030
2015-11-06 11:14:41.344 msDemo[1313:45789] str3 = hello  str3 = 0x100206ba0
2015-11-06 11:14:41.344 msDemo[1313:45789] mutableStr2 = hello  mutableStr2 = 0x100001030
2015-11-06 11:14:41.344 msDemo[1313:45789] mutableStr3 = hello  mutableStr3 = 0x100206cc0
2015-11-06 11:14:41.344 msDemo[1313:45789] mutableStr4 = hello-OC  mutableStr4 = 0x100206c00

此处特别给出了三次运行结果,可以看出mutableCopy每次复制的地址都不一样,他复制的地址是每次随机复制内存的地址,是深copy,Copy每次运行的结果都相同,都是 0x100001030,他只是指针的Copy,不管是NSString还是NSMutableString类型

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
船舶KT模型辨识是指利用MATLAB软件对船舶动力学参数中的KT模型进行识别和估计。KT模型是描述船舶推力与螺旋桨转速之间关系的数学模型,也是评估船舶性能和设计优化的重要指标之一。 在MATLAB中进行船舶KT模型辨识可以通过以下步骤实现: 1. 数据采集:首先需要获取船舶在不同螺旋桨转速下的推力数据。可以通过实际船舶试验或者数值仿真的方式获取数据。 2. 数据预处理:对采集到的数据进行预处理,包括去除异常值、滤波和数据对齐等,确保数据的准确性和一致性。 3. 模型建立:根据船舶KT模型的定义和理论,构建适当的数学模型。这可能涉及到多个变量和参数,例如船舶速度、重量、螺旋桨直径等。 4. 参数估计:利用MATLAB中的数学工具,例如最小二乘法等,对建立的模型进行参数估计。通过拟合实测数据和模型输出结果,得到最优的模型参数。这一步骤可能需要多次迭代和调整,以达到较好的拟合效果。 5. 模型验证:对得到的KT模型进行验证,使用剩余数据或者新的实际测试数据进行验证。通过比较实测推力和模型预测推力的差异,评估模型的准确性和可靠性。 6. 模型应用:基于得到的KT模型,可以进行船舶性能优化、参数调整、控制策略设计等应用。利用MATLAB的优化和控制工具箱,可以进一步分析和优化船舶的推力性能。 通过以上步骤,利用MATLAB软件对船舶KT模型进行辨识和估计,可以帮助船舶设计师和工程师更好地了解和优化船舶的推力性能,提高航行效率和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值