iOS经典讲解之Objective-C内存管理基础知识及内存管理黄金原则

Objective-C入门指南:从环境搭建到实战项目开发 面向对象编程是现代软件开发的核心范式之一,它通过封装、继承和多态等机制组织代码,提升可维护性和复用性。在iOS/macOS生态中,Objective-C作为基于C语言的面向对象语言,其独特的消息传递机制和动态运行时特性,为理解Cocoa Touch框架的底层原理提供了关键视角。掌握Objective-C不仅能帮助开发者深入理解iOS系统框架的设计哲学,还能有效维护和迭代大量存量项目代码,尤其是在处理内存管理、与C/C++库桥接以及调试经典崩溃场景时具有不可替代的价值。对于希望夯实iOS开发基础、进入中大型团 阅读详情

       在进行讲解内存管理之前先来了解一下内存的基础知识:

1、内存区的划分:

栈区(stack):

①栈区主要存储局部变量以及函数的参数。函数调用的过程其实就是入栈出栈的过程。(先进后出,后进先出)

②栈空间的分配是从高到低分配,从低到高存储。

③管理方式:系统自动进行管理,不需要我们手动管理。
堆区(heap): 经过排序的树形结构,通常是二叉树, 常用来实现优先队列堆的存取,是随意的。由程序员自己进行分配和释放,手动进行管理,堆区的空间相对比较大。
静态区(全局区):

由static修饰的变量是静态变量(全局变量)。 ①变量只初始化一次。②如果不给初值的话,默认0。③静态变量只有程序退出的时候才会被释放。
常量区: 也叫文字常量区,一般存储常量字符串。
代码区: 我们的代码编译成的CPU指令所在区域。

2、内存的静态分配和动态分配
静态分配的内存在栈内存中,由系统分配 系统释放 自由度较低。 动态分配的内存在堆内存中有程序员自己灵活分配 ,需要自己管理内存, 自由度较低。

3、内存管理的常见问题:
①内存泄露 :开辟了了一块内存 ,使用完后没有释放。
②提前释放 :释放了一个还要继续使用的内存。
③释放过度: 对一块内存重复释放 造成程序崩溃。

④野指针:释放完内存之后,没有将指针置空。

4、内存管理方式:

垃圾回收:Garbage Collection:程序员只需要开辟内存空间,不需要⽤用代码显示地释放,系统来判断哪些空间不再被使用,并回收这些内存空间,以便再次分配。整个回收的过程不需要写任何代码,由系统自动完成垃圾回收。Java开发中一直使用的就是垃圾回收技术。
MRC:Manual Reference Count(人工引用计数):内存的开辟和释放都由程序代码进⾏行控制。相对垃圾回收来说,对内存的控制更加灵活,可以在需要释放的时候及时释放,对程序员的要求较高,程序员要熟悉内存管理的机制。
ARC:Auto Reference Count(自动引用计数):iOS 5.0的编译器特性,它允许用户只开辟空间,不用去释放空间。它不是垃圾回收!它的本质 还是MRC,只是编译器帮程序员默认加了释放的代码。
几种内存管理方式的特点:
①垃圾回收:(GC)程序员只负责开辟空间,不负责内存释放,内存释放工作由系统自动完成。在iOS中没有垃圾回收机制,但在MAC OS中存在垃圾回收。
②在iOS中通过引用计数的形式管理内存,当某一块内存区域的引用计数不为0时,说明有对象在使用这一块内存或者说有对象持有这一块内存,那么这一块内存就不能被系统回收,当某一块内存区域的引用计数为0时,说明这块内存区域没有对象引用,那么系统将这一块内存区域及时回收系统自动调用dealloc方法进行回收内存区域。
③iOS里面内存管理方式是MRC(手动引用计数)和ARC(自动引用计数),对于MRC来说,需要我们程序员自己手动去记录某块内存区域的使用情况(也就是引用计数是几),alloc、retain、copy(mutableCopy)、new可以是引用计数加1,release和autorelease可以使引用计数减1。ARC是iOS5出现的,是编译器的特性,基于静态编译,原理是编译器在他认为合适的地方给你自己进行记录引用计数的增减,不需要我们自己去写retain、release、autorelease这些代码。
5、内存管理原则:
①你创建的对象你可以拥有。(创建对象的方法:alloc、new、copy、mutableCopy)
②不是你创建的对象你也可以拥有,使用retain
③
你拥有的对象在不需要的时候,要负责释放(release或autorelease),防止内存泄漏
④如果你没有拥有这个对象(通过便利构造器创建的对象),那么不能对他进行释放,防止过度释放。
内存管理黄金原则:
凡是使⽤用了alloc、new、retain或者copy、mutableCopy让内存的引⽤计数增加了,就需要使⽤release或者autorelease让内存的引用计数减少。在一段代码内,增加和减少的次数要相等。
注意:
dealloc方法是当对象的引用计数为0时由系统自动调用的不需要自己调用。autorelease是在未来的某一时刻引用计数减一 ,向一个对象发送autorelease消息,这个对象何时释放,取决于 autoreleasepool,当pool释放或结束的时候,会向自动释放池内发送过autorelease消息的对象发送release消息让该对象释放。

JS与Objective-C交互实战演示项目 简介:JavaScript与Objective-C是Web前端与iOS原生开发的核心语言,二者通过混合开发技术实现高效交互。本“js与oc交互demo”基于WKWebView与JavaScriptCore API,展示了如何在iOS应用中实现JavaScript与Objective-C的双向通信。 阅读详情

相关推荐

iOS之内存管理---堆栈问题详解

3.内存管理的基本原则iOS内存管理黄金法则:如果使用alloc、copy(mutableCopy)或者retain一个对象时,你就有义务向它发送一条release或者autorelease消息。其他方法创建的对象,不需要你来进行内存管理 OC中的堆栈: ①管理方式: 栈:是由编译器自动管理,无需我们手工控制 堆:释放工作由程序员控制,容易产生memory leak。②申请大小 栈:

Mcy的iOS学习站 1460

在Unity中为Sentis部署的YOLOv8模型集成NMS层并实现移动端性能优化

本文详细讲解了在Unity中利用Sentis部署YOLOv8模型时,如何通过代码动态集成NMS层以解决移动端性能瓶颈。文章核心在于避免导出时绑定NMS,转而使用Sentis原生API在运行时高效构建NMS处理流程,并分享了关键的GPU数据操作与移动端性能优化技巧,确保模型在移动设备上流畅运行。

p1q2r的博客 1094

iOS开发教程之OC语言

Objective-C是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,本专题更系统的讲解Objective-C语言当中的一些要点,类的封装、基本数据结构(NSString、NSData)、继承、内存管理(retain点语法、MyArray、AutoreleasePool、浅拷贝详述、深拷贝详述)等内容。

从零构建物联网监控系统:STM32+迪文屏+WiFi模组的实战解析

本文详细解析了基于STM32微控制器、迪文串口屏和WiFi模组构建物联网监控系统的完整方案。从硬件选型、系统架构设计到数据交互实现,提供了包括迪文屏GUI开发、STM32通信协议、低功耗优化等实战经验,帮助开发者快速掌握物联网监控系统的核心技术。

docker7nomad的博客 730

压电传感器信号放大难题?用运放设计电荷放大器的5个关键步骤

本文详细解析了压电传感器信号放大难题,并提供了用运放设计电荷放大器的5个关键步骤。从电压放大到电荷放大的范式转换,到运放选型、反馈网络设计、PCB布局及频响特性验证,帮助工程师解决工业自动化中的信号衰减问题,提升测量精度和稳定性。

weixin_27303545的博客 449

Objective-c中的内存管理的黄金法则,OC中最重要的部分

现如今还是菜菜,如若有错误的地方还望指正! 如若转载,请注明源地址:http://blog.youkuaiyun.com/shinilaobababa/article/details/8453434 首先还是来一句OC中的内存管理的黄金法则比较好       如果对一个对象使用了alloc、[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease。(黄金法

出头天 7832

代码审计工具学习之RISP(安装以及初步操作)

1 代码审计 1.1名词解释 代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。 C和C ++源代码是最常见的审计代码,因为许多高级语言(如Python)具有较少的潜在易受攻击的功能(例如,不检查边界的函数)。 顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过..

weixin_52515588的博客 1万+

IOS知识分享:OC内存管理(黄金法则)

1、内存管理-黄金法则 The basic rule to apply is everything that increases the reference counter with alloc, [mutable]copy[withZone:] or retain is in charge of the corresponding [auto]release. 如果对一个对象使用了a

lianglidely的专栏 1334

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1306

Android Jetpack 最全面试题及参考答案

要使用 WorkManager 定义一个异步任务,以下是详细步骤。首先,需要创建一个继承自 Worker 类的自定义类,这个类代表了要执行的具体任务逻辑。// 在这里编写具体的任务逻辑,比如从网络下载文件try {在上述代码中,doWork方法就是任务的核心执行逻辑所在,这里模拟了从给定的 URL 下载文件到本地的操作,若下载成功返回,若出现异常则返回。然后,在需要调度任务的地方,比如在某个 Activity 或者 Fragment 中,通过构建 WorkRequest 来安排任务执行。

大模型大数据攻城狮的专栏 1895

iOS内存管理

IOS内存管理IOS内存管理管理原则1. 非ARC模式,MRR(manual retain-release)2. ARC模式循环引用问题内存管理注意事项常见的内存管理问题 IOS内存管理 iOS需要开发者管理内存,很高高级语言都有垃圾回收机制,但iOS开发却没有垃圾回收机制。虽然iOS没有垃圾回收机制,但是mac OS有垃圾回收机制。iOS将内存管理的任务交给了开发者。 管理原则 OC中的内存...

kyl282889543的博客 711

2021年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。现在从m位中删除k位(0

人生就是一个不断学习的过程 1011

iOS经典讲解之Objective-C关联对象的内存管理

@关联对象的内存管理: 如果两个或者两个以上的对象存在关联,那么在内存管理方面要比一个对象的内存管理复杂一些,下面通过一个简单的例子来讲解一下关联对象的内存管理问题: 创建一个Pet(宠物)类: #import @interface Pet : NSObject { // 无实例变量 } // 声明一个行为方法 - (void)play; @end #import "Pet

刘新林的技术博客 1842

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Objective-C中@property的所有属性详解

1,assign : 简单赋值,不更改索引计数 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a 和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉   应用场合: 对

到底是天堂还是地狱... 2437

深度学习工具包 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")

Objective-c 内存管理方式

iOS的内存管理,程序员只需要管理内存的堆区,堆区存放的是对象;内存中的栈区(存放基本数据类型,局部变量),静态存储区(存放全局变量、静态变量、外部变量),常量区(存放常量),代码区(存放二进制的代码)由系统管理。 OC的内存管理方式有两种:MRR(Manual Retain - Release)手动保持与释放,由程序员调用方法加1、减1。

清水<。)#)))≦iOS开发成长之路 414

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Objective-c/iOS/iphone开发视频教程迅雷/高速下载

转自:http://bbs.lwxshow.com/forum-2-1.html 闲着也是闲着. 给大家分享个IOS开发视频教程 Objective-c视频程下载 需要迅雷高速下载的给力回复下. iPhone开发视频教程-Objective-C语言教程-第1讲-基本语法                   http://

大家学-卢卫湘 2549

OC-内存管理

6-18 内存管理 1.C语言中,一个malloc必须只能对应一个free 堆空间需要手动释放。 C语言当中,只要涉及堆空间的使用,就要考虑释放问题;我们可以提供一个计数器来解决堆空间释放问题。多一个人使用,计数器加1;减少一个人使用,计数器减1;当计数器为0时,释放堆空间。 *****************************************************

King的专栏 1173

Objective-C内存管理

看了视频、文章后总结一下自己理解的Objective-C的内存管理。 ARC 手动内存管理的基本操作函数及原则(黄金法则或配对原则) 内存的开辟和销毁时成对出现的。 在一个代码快中出现了alloc,new,retain,copy,mutabcopy等关键词,当对象不再使用后,就要有对应的release,autorelease 出现与之相对应。 当对象的“引用计数”(retainCount)变为“...

weixin_30485379的博客 117

我的iOS开发之Objective-C第7天之MRC

前言OC内存五大分区 栈 (stack):用户存放程序临时创建的局部变量 堆(heap):动态分配的内存段 BSS段( bss segment ):未初始化的全局变量和静态变量 数据段(data segment):初始化的全局变量和静态变量 代码段(code segment/text segment):程序执行代码的一块内存区域 1、OC内存管理基本概念 为什么要进行内存管理 由于移动设备的内存

huohuoshenghui的博客 384

Objective-C 中的内存分配

Objective-C 中的内存分配 在 Objective-C 中,对象通常是使用alloc方法在堆上创建的。[NSObject alloc]方法会在对堆上分配一块内存,按照NSObject的内部结构填充这块儿内存区域。 一旦对象创建完成,就不可能再移动它了。因为很可能有很多指针都指向这个对象,这些指针并没有被追踪。因此没有办法在移动对象的位置之后更新全部的这些指针。 MRC 与 ARC Objective-C中提供了两种内存管理机制:MRC(MannulReference Countin...

u010029439的博客 427

iOS阶段学习第20天笔记(MRC内存管理)

iOS学习(OC语言)知识点整理 一、OC中的内存管理1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int 、float、double...)无效 OC中采用引用计数器对内存做管理,他是一个整数数据,表示对象引用的次数,每个对象分配4字节 的内存空间存放引用计数器当一个对象的引用计数器值为0时,它将被释放,反过来说,如果一个对象的...

164

Objective-C入门指南:iOS开发基石与Swift混编实战

面向对象编程是现代软件开发的核心范式,它通过封装、继承和多态等机制组织代码。在iOS/macOS生态中,Objective-C作为C语言的超集,其独特的消息传递机制和动态运行时特性,构成了Cocoa和Cocoa Touch框架的设计哲学基础。理解Objective-C的原理,不仅能帮助开发者深入掌握内存管理、引用循环等底层机制,更能无缝对接海量存量代码库,提升解决复杂问题的能力。在实际工程中,掌握Objective-C与Swift的混编技巧,是维护大型项目、集成第三方库的关键。本文聚焦Objective-C

weixin_33881140的博客 470

关于OC的内存管理

1 什么是内存管理? 内存管理是关于如何管理对象生命周期的编程原则。 OC中的内存管理只针对OC中的对象,所有的对象都继承NSObject 基本数据类型不需要管理内存。 当一个对象没有人再使用,该对象应该从内存中销毁掉。 2 引用计数 所有的OC对象都有一个计数器,这个计数器我们成为引用计数。 引用计数表示有几个人在使用当前对象。 alloc用来创建对象,创建完成后

z13sunshine的博客 415

Objective-C 入门初级学习

一.Objective-C 语法学习    相关概念 Xcode: 开发环境,像Visual Studio Objective-C:计算机开发语言,像C++,C#,JAVA   后缀名 含义 .c C language source file .cc , .cpp C++ language source f

eyeooo的狗窝 1451

新增迅雷下载地址:Objective-c/iOS/iphone开发视频教程迅雷/高速下载

转自:http://www.lwxshow.com/archives/397 2012-4-10更新 大家访问 http://www.lwxshow.com/archives/397 看到一个2012-4-10更新的。 点击下面的链接下载对应的视频教程 闲着也是闲着. 给大家分享个IOS开发视频教程 Objective-...

fzhqcjc的博客 306
上一篇: iOS经典讲解之NSNotification(通知)
下一篇: iOS经典讲解之Objective-C关联对象的内存管理
刘新林
博客等级 码龄11年 72粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值