内存管理copy

15-YOLOV8OBB损失函数详解 在Ultralytics YOLO 模型中,OBB 由YOLO OBB 格式中的四个角点表示。这样可以更准确地检测到物体,因为边界框可以旋转以更好地适应物体。其坐标在 0 和 1 之间归一化:YOLO 在内部处理损失和输出是xywhr 格式,xy表示边界框的中心点、whr表示宽度、高度和旋转角度。 阅读详情

01

copy的目的就是为了产生一个新的副本对象,修改副本对象,不会对影响原来的对象
IOS提供了两个拷贝方法,

  1. copy不可变拷贝,产生不可变的副本
    2.mutablecCopy,产生可变的副本
NSMutableString *testStr = [NSMutableString stringWithFormat:@"ddd"];
        NSString *str2 =  [testStr copy];//不可变
        NSMutableString *str3 = [testStr mutableCopy];//可变

02深拷贝和浅拷贝

通过copy产生的新的对象,相当于alloc出来的对象

NSMutableString *testStr = [NSMutableString stringWithFormat:@"ddd"];
        NSString *str2 =  [testStr copy];//不可变
        NSMutableString *str3 = [testStr mutableCopy];//可变
        [testStr release];
        [str2 release];
        [str3 release
copy出来的新对象

copy的目的就是为了产生一个新的对象,修改互不影响,但是str1指向的是一个不可变的对象,所以copy出的也是一个不可变的对象,
不可变对象copy新的对象还是指向原来的对象,相当于return

  • 深拷贝和浅拷贝
  1. 深拷贝,内容拷贝会产生新的对象,
    2.浅拷贝,指针拷贝,不会产生新的对象

03taggedPointer与拷贝

如果字符串是taggedPointer,他就不是真正的对象,那么饮用计数就不存在

04NSArray和NSDictionary

NSMutableArray *arr = [NSMutableArray array];
        NSArray *arr2 = [arr copy];//深拷贝
        NSMutableArray *arr3 = [arr mutableCopy];//深拷贝

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"jack",@"name" ,nil];
        NSDictionary *dic2 = [dic copy];//浅拷贝
        NSMutableDictionary *dic3 = [dic mutableCopy];//深拷贝
copy和mutableCopy

可变对象调用mutableCopy肯定是深拷贝,
不可变对象调用copy是浅拷贝,其他都是深拷贝

05@property copy

- (void)setData:(NSData *)data
{
    if (_data != data)
    {
        [_data release];
        _data = [data copy];
    }
}

但是如果是个可变的数组,执行copy策略,会报错,因为他是一个深拷贝,会生成一个不可变的数组
创建IOS项目,字符串都是copy策略,他可以保证,这个字符串,肯定是不可变的,如果你想要改属性,就直接将整属性赋值一个新的文字,不希望他去修改原来的字符串

06 自定义copy

比如一个对象,已经有很多个属性被赋值,想直接生成一个新对象,含有他的那些属性值这时候就可以使用copy,
关于可变和不可变只存在foundation框架中的类,其他对象是没有的,属性都是通用的所有不存在可变的copy策略,
我们自定义的对象直接使用copy的话会报错,copyWithZone方法没有实现的错误,自定义的类要想copy首先需要遵守,NSCopying协议,然后实现copyWithZone方法

- (id)copyWithZone:(struct _NSZone *)zone
{
    Person *p = [[Person alloc] init];
    p.age = self.age;
    p.name = self.name;
    return p;
}

不存在mutableCopy策略

接口电路设计的关键要点 接口电路设计是嵌入式硬件开发的核心环节,本文系统阐述了五大关键设计要点:1)电平匹配技术,详细分析了3.3V/5V系统互连方案及转换电路计算;2)阻抗匹配原理,包括高速信号反射机制及差分信号处理;3)滤波与去耦设计,提出多级电容配置和"先电容后过孔"布局原则;4)接地设计规范,重点说明模拟/数字地分离及高速信号回流路径;5)防护电路设计,涵盖防反接、过流保护及ESD防护方案。文章通过具体计算公式、器件选型指南和布局技巧,为接口电路设计提供了系统化的解决方案,并附有设计检查清单和典型问题分 阅读详情

相关推荐

28、解码清华SSVEP基准数据集:从EEG信号到深度学习模型的实战指南

本文详细解析了清华大学SSVEP基准数据集的处理与深度学习模型构建全流程。从EEG信号预处理、数据维度变换到SSVEP分类模型设计,提供了实战代码示例和关键技巧,帮助读者掌握脑机接口领域的数据处理方法与模型优化策略。

weixin_29029995的博客 176

集合对象的内存管理、copy概念

一、集合对象 1、集合包括 NSArray ,NSSet , NSDrictionary2、内存管理当一个对象加入到集合中,那么该对象的引用计数会+1 当集合被销毁的时候,集合会向集合中的元素发送release消息3、内存管理原则1> 当调用alloc、new、copy(mutableCopy)方法产生一个新对象的时候,就必须在最后调用一次release或者autorelease 2> 当调用r

唐枫专栏 714

Setup&Hold互卡问题和Useful Skew的影响

setup和hold互卡问题分析

godping的博客 5095

——黑马程序员——OC中集合对象的内存管理及copy的用法

-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------

yhp1095785221的博客 487

Ubuntu22.04上如何用Docker一键部署Ragflow+Ollama(附CUDA配置避坑指南)

本文详细介绍了在Ubuntu22.04系统上使用Docker一键部署Ragflow+Ollama的完整流程,特别提供了CUDA配置的避坑指南。从硬件兼容性检查、驱动安装到容器网络配置,手把手教你搭建本地化大模型环境,解决CUDA驱动冲突等常见问题,助力开发者快速构建AI应用开发平台。

weixin_26875109的博客 284

校园网改造实录:手把手教你用华为MA5800 OLT调试全光网(附常用排错命令)

本文详细记录了校园全光网改造中华为MA5800 OLT的部署与调试过程,涵盖设备选型、基础配置、ONU批量部署及高频故障排查。通过实战案例和排错命令,帮助网络工程师快速掌握全光网调试技巧,实现低延迟、高稳定的网络性能。

weixin_42552716的博客 573

OutMan——集合对象的内存管理、copy的介绍及使用

集合对象的内存管理 copy的介绍及使用

OUT___Man的博客 756

蚂蚁区块链第20课 可信存证司法链从入门到实施

1. 摘要 杭州互联网法院和司法区块链平台的技术建设方都是蚂蚁金服区块链。那么,如何借助蚂蚁的技术能力和服务能力,快速对接上司法链,便于后续打通存证/维权的闭环流程。本文介绍蚂蚁区块链可信存证的业务及特点,费用及接入方法等,具有实战指导意义。 2. 蚂蚁区块链可信存证的介绍 蚂蚁区块链可信存证具备全链路可信,司法权威节点见证,安全隐私保护,一站式接入能力,全国首家法律认可的区块链存证平台。 2...

辉哥的技术投资路 6087

IOS内存管理retain,assign,copy,strong,weak

IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数。 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样。 (一般情况下: 后面会讨论例外情况) alloc 对象分配后引用计数为1 retain 对象的引用计数+1 copy copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来对...

anggengting9489的博客 118

goahead(嵌入式Web服务器)之文件传输篇

goahead文件上传原理: 使用html form即表单提交文件上传请求,web服务器核心处理接收客户端Post过来的文件数据(注意post的是二进制数据),最后,web服务器把接收到文件数据以二进制格式写到服务器本端存储系统。 goahead文件上传步骤: 1、创建upload.html文件,内容如下: <html> <head> <meta charset="utf-8"/> <title>Upload</title> </head&g

weixin_40732273的博客 3495

小米15修复“NV损坏” 去除主板校验电阻步骤解析与图示

小米15系列将搭载骁龙8至尊版处理器,采用台积电3nm工艺。文章分析了手机出现"NV损坏"故障的表现及修复方法,包括通信异常、系统启动问题等典型症状,并介绍了去除主板校验电阻和刷写工程固件两种修复方案。重点讲解了去除主板电阻后刷写QCN文件的操作流程,强调在维修过程中需要结合分析与思考。适用于小米15系列特定机型(24129PN74G/I/C)的硬件修复。

小马哥的专栏 313

OC Copy和内存管理

weixin_34247155的博客 76

Vision 机器视觉案例 之 零件边缘缺陷检测

缺陷检测工具

机器视觉李小白的博客 1386

copy与mutableCopy的内存管理剖析

title: copy与mutableCopy的内存管理剖析date: 2016-04-24 16:50:04 tags: copy copy与mutableCopy相关的内存管理 不知道为什么一说这个,很多人都拿NSString和NSMutableString做测试,我想最直接的是因为常用又实现了copy和mutableCopy的代理,但是NSStr...

weixin_33778544的博客 198

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

内存管理: alloc, retain, release, autorelease, copy, assign

内存管理必须遵守的原则  :  (1) 使用者必须保证在他使用的周期内是安全的, 保证在不使用的时候消失                                              (2) 谁让引用计数+1, 谁要负责引用计数-1  1. 堆区内存有系统去管理(出生命周期被自动释放掉)      int a = 10; a在栈区  (所有的变量都在栈区, 除了静态s

smiling1128的博客 500

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OC内存管理 assign retain copy 原型函数

OC内存管理 property中各属性函数原型: 1️⃣assign:  -(void)setP:(point*)_p{    p=_p ; } 2️⃣retain:  -(void)setP:(point*)_p{  if(p!=_p){ [p release];   p=[_p retain];    }  } 3️⃣copy:   -(void)setP:(poi

zhanghow的博客 402

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IOS内存管理retain, assign, copy, strong, weak

1.strong和weak 自从有了ARC,就可以使用weak或strong来说明属性是弱引用还是强引用;这时你是不能使用retain release autorelease 操作的,因为ARC会自动为你做好这些操作,但是你需要在对象属性上使用weak 和strong,其中strong就相当于retain属性,而weak相当于assign。 2.assign,retain和copy

swear2008的专栏 918

assign/retain/copy各内存管理特性的差异

对内存管理语句的assign、retain、copy、multableCopy等特性,做了一个差异对比和分析。

DCSnail-蜗牛 3843

内存管理、copy、深浅拷贝

内存管理、copy、深浅拷贝                                   一、内存管理 1.内存管理的核心:谁分配、谁释放。 2.引用计数器加1的有:alloc、new、copy、retain。 3.引用计数器减1的有:release、autorelease。 注意:有retain就有release。 4.延迟释放(autorelease):和自动释放池配合使用

邹贤的博客 620

iOS内存管理retain,assign,copy,strong,weak

转自:http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html iOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数。 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样。(一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1re...

weixin_34402408的博客 96

内存管理(二):copy、retain、assign

我们要管理的是alloc、copy、retain(zi'ji),其他的不用管理 1. copy 所有遵循于NSCopying协议的类,都可以使用copy: NSString、NSNumber、NSArray、NSDictionary NSValue 1.1 字符串: NSString *str = @"hello"; NSString *str1 = [str copy];

zhangyue0405的博客 325

OC中内存管理 assign, retain, copy 的 setter 和 getter 方法

最近关于 setter 和 getter 方法突然有些晕, 所以重新做了整理 内存管理 assign, retain, copy 的 setter 和 getter 方法assign的 setter 和 getter 方法(用来定义简单数据类型)@property (nonatomic, assign) NSString *name;1. assign 的 setter 方法- (void)setN

Sara.Burton的博客 614

iOS内存管理--nonatomic,assign,copy,retain

nonatomic:非原子性访问,不加锁进行同步,多线程并发访问会提高性能。如果不加此属性,默认是原子性访问。 assign:简单赋值,不更改引用计数。一般用于基本数据类型。 copy:在系统生成的setter方法中,对加了此属性的指针先释放旧值,然后赋予指针传入的新值的拷贝,拷贝工作由copy方法执行。对应的对象必须实现NSCopying协议。 ...

dlgms057649的博客 151

内存管理,readwrite,readonly,assign,retain,copy,nonatomic,的作用以及深浅拷贝

1.内存管理机制当一个实例alloc以后,其引用计数器自动+1,在它引用到其他对象,或者超出作用域的时候,会自动减去1,此情况为ARC的情况,若MRC,需要手动retain和release,或者创建自动释放池来进行内存管理.2.readwrite,readonly,assign,retain,copy,nonatomic的区别readwrite:可读可写,默认属性,系统会生成setter和gette

wrjzycok的博客 802

iOS开发之内存管理:关于assign,retain和copy

举个例子:     NSString *houseOfMM = [[NSString alloc] initWithString:'装梵几的三室两厅'];  上面一段代码会执行以下两个动作:   1 在堆上分配一段内存用来存储@' 装梵几的三室两厅 ' ,比如:内存地址为 0X1111  内容为 ' 装梵几的三室两厅' ,  2 在栈上分配一段内存用来存储 houseOfMM 

lypcareer的专栏 732
上一篇: 多线程-读写安全
下一篇: 内存管理-引用计数的存储
I微微一笑I
博客等级 码龄11年 0粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值