黑马程序员---学习笔记23:OC基础(10)内存管理

最大熵模型预测实战:从原理到栅格生成的避坑指南 最大熵模型是一种基于约束优化的概率预测方法,其核心是在满足已知特征期望的前提下,选择条件熵最大的分布,从而避免引入额外假设。该模型通过特征函数将业务语言转化为数学约束,利用对数线性形式和凸优化求解,输出可解释的概率预测。在物种分布建模、事件风险预测等场景中,最大熵模型尤其适合正样本有限、特征维度不高的任务。实际落地时,需关注特征分箱、正则化系数调参以及栅格分块预测等工程细节,同时警惕矩阵奇异、空间自相关泄露等常见问题。 阅读详情

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


内存分为几大区域:
1) 栈区:局部变量
2) 堆区:程序运行过程中动态分配的存储空间
3) BSS段:没有初始化的全局变量和静态变量
4) 数据区 :已经初始化的全局变量和静态变量,和字符串
5) 代码段:程序编译后代码的内容
后三个区域程序启动时,自动产生,因此我们的程序中不宜有过多的全局变量。
栈区内存分配是由高到低
堆区内存分配是由低到高


内存管理的范围:
管理任何继承自NSObject 的对象,对其他的基本数据类型无效。相应的区域是堆区。

内存泄漏:我们自己存储的内存空间,我们没有释放

对象在创建之后除了在堆区存在isa指针,实例变量,还存在retainCount计数器,用来存储有多少个该对象的拥有者

引用计数器是判断这个对象要不要回收的依据,如果为0就可以回收了
例外情况:对象值为nil时,计数器为0,但不会回收空间

对引用计数器的操作:
Retain消息:计数器+1,该方法返回对象本身
Release消息:计数器-1,(并不代表释放对象)
retainCount消息:获得对象当前的引用计数器值 %ld%tu

当对象引用计数器为0的时候,对象会被销毁,占用的内存会被系统回收。
系统向对象发送dealloc消息,一般需要重写。这是对象的临终遗言,在dealloc内部要调用[super dealloc]

OC中提供了三种内存管理方式:
1) MRC,手动管理
2) ARC,自动引用计数,IOS4.1之后推出的
3) Garbage collection(垃圾回收),ios不支持垃圾回收
学习需求:
理解MRC ,尽量使用ARC

手动内存管理:
注意:我们创建一个项目,此时默认的是ARC的(自动内存管理)
我们要手动改为MRC
找到项目---右侧Build settings----搜索auto---找到ARC,把后面的Yse改了

证明P的空间被释放,可以在Person类中重写dealloc方法,因为释放的话,会调用dealoc方法。

-(void)dealloc{
NSLog(@”Person挂掉了”);
[super dealloc];
}
Dealloc是系统根据计数器数值自动调用的,不要手动调用。
1) 如果有人使用,就不应该回收
如果你想使用这个方法,应该让这个对象retain一次
如果你不想使用这个方法,应该让这个对象release一次

2)谁创建,谁release
3)谁调用retain谁release
4)总结:有始有终,有加就该有减

内存管理研究的内容:
1) 野指针;定义的指针变量没有初始化 2)指向的空间已经被释放
2) 内存泄漏:指针没了,空间还在
Person *p =[Person new];
P存在栈区
[Person new]; 堆区
如果栈区的p已经释放了,而堆区的空间还没有释放,堆区的空间就被泄漏了


单个对象内存管理(野指针)
僵尸对象默认情况是不报错的,如果要让他报错要开启僵尸对象检测
顶部的target -edit scheme->run—Diag…--enable zombie object

nil :如果一个【对象】没有被赋值,默认的是nil
Nil: 给【类对象赋值】
NULL:通用指针,空指针
【NSNul null】:是一个对象,他用在不能使用nil 的场合

[nil run];没有任何效果,但是也不会报错。d = nil;可以给对象赋值
Nil 可以给类赋值
避免使用僵尸对象的方法,对象释放以后,给对象赋值nil,增加程序的健壮性

多个对象的野指针问题:
当有多个对象需要release 的时候,比如:人用车,在重写人release 的时候,在其中先release车,这样,不会造成人被释放,无法找到相应的车,造成车的内存释放。

对于对象作为另外一个类的实例变量
人有一条狗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dog * _dog;
-(void)setDog: (Dog *)dog{
1)判断对象是否是原对象
If(_dog!=dog)
{
2)release旧值
[_dog release];
Retain新值并且赋值给实例变量
_dog =[dog retain];
}
}


@property参数

三类 7个
原子性
Atomic:性能低,默认
nonatomic(效率高,速度快,一般使用这个)
读写
Readwrite:默认,setter和getter都声明和实现
Readonly:只是生成getter的声明和实现
内存管理
assign(直接赋值) 实例变量是基本数据类型的时候直接使用(默认,适用于非OC对象)

retain(对象判断,不过和赋值不相同,先release,然后retain一次,然后再赋值)什么时候使用retain,在一个类中关联其他对象的时候,这个对象的@property(nonautomic,retain)

copy :release旧值,copy新值

替换setter方法:@property(nonautomic,setter=isVip:)将系统默认的原setVip改为isVip
[p setVip:YES];->[p isVip:YES];

替换getter方法的名称:@property(nonautomic,setter=isVip:,getter=isVip)

永磁同步电机ADRC控制策略优化:从理论到Simulink仿真实践 本文深入探讨了永磁同步电机自抗扰控制(ADRC)策略的优化与实践。针对传统PID在动态响应、抗扰及噪声抑制方面的不足,详细解析了ADRC三大核心组件——跟踪微分器(TD)、扩张状态观测器(ESO)与非线性状态误差反馈(NLSEF)的工作原理。通过手把手的Simulink仿真教程,展示了从算法编写、模型搭建到参数整定的完整流程,并进阶实现了位置-速度双环ADRC协同控制,为高性能电机伺服系统设计提供了从理论到实践的清晰指南。 阅读详情

相关推荐

PCAN-Explorer5使用教程

在PCAN中新建工程,导入DBC文件(右键apply),导入采集的数据选择对应的CAN通道点击红框中的标记可选择想要查看的信号在plot界面跳出属性,可调整信号显示的样式和最大最小值调出cursor,选择需要观测的变量,选中右键style——Period 可显示间隔时间增加cursor,可观测多个变量。

weixin_43997043的博客 6914

重载dealloc方法和关键字super

@synthesize @proterty setTo: X over: Y;

638

随机子空间集成方法原理与scikit-learn实践

集成学习通过组合多个基学习器的预测结果来提升模型性能,是机器学习中的核心方法之一。随机子空间方法作为集成学习的重要变体,其核心原理是通过对特征空间进行随机子采样来增加模型多样性。这种方法特别适合处理高维数据,能有效缓解维度灾难问题,常与决策树、K近邻等对特征选择敏感的基学习器配合使用。在scikit-learn中,可以通过BaggingClassifier和BaggingRegressor实现随机子空间集成,关键参数包括max_features和n_estimators。实际应用中,该方法在金融风控、医疗诊

weixin_33773084的博客 377

黑马程序员————OC内存管理_笔记整理(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

whqkgd55的专栏 587

TMP112/TMP102温度传感器驱动开发与嵌入式实战

数字温度传感器是嵌入式系统环境感知的核心器件,其通过I²C等标准总线实现高精度、低功耗测温。原理上依赖ΔΣ模数转换与二进制补码数据格式,结合寄存器配置实现模式控制、阈值报警与功耗管理。技术价值体现在±0.5°C级精度、1μA级静态电流及SOT-563超小封装带来的系统集成优势。广泛应用于工业MCU热监控、电池物联网终端、医疗电子温度补偿及汽车ECU板级测温等场景。本文围绕TMP112/TMP102展开,深入解析寄存器协议、硬件接口约束、HAL驱动分层设计、FreeRTOS任务调度及生产级校准方法,覆盖从芯片

weixin_35756690的博客 674

告别环境配置噩梦:VSCode + MinGW 下 OpenGL (glad/glm/glfw) 一站式配置指南(含常见错误排查)

本文提供了一份详细的VSCode与MinGW下OpenGL开发环境配置指南,涵盖glad、glm和glfw三大核心库的安装与调试。通过逐步指导解决常见错误,帮助开发者快速搭建高效的OpenGL开发环境,特别适合初学者避免环境配置中的常见陷阱。

weixin_42557803的博客 490

iOS —— ARC、MRC 下dealloc 方法存在的意义

MRC下dealloc 方法其实在MRC中dealloc方法存在的主要意义是为了 释放自身的实例变量, 移除观察者, 停止timer, 移除通知, 代理置空等。 注意MRC 下dealoc 方法一定要在最后写 [super dealloc]; ARC下 系统会帮助我们释放该对象所包含的实例变量,但是有些对象还是需要们自己去释放的(比如Core Foundation框架下的一些对象),另外通知中观察者

ci915194561的专栏 3475

别再只用固定线了!聊聊Android车机‘快速倒车’与‘正常倒车’的UI与数据流核心差异(附动态轨迹线实现原理)

本文深度解析Android车机中快速倒车与正常倒车的核心差异,探讨从内核级视频流水线到动态轨迹线的技术实现。快速倒车通过内核直接操作FrameBuffer实现2秒内响应,而正常倒车则支持多传感器数据融合与动态UI元素。文章还分享了动态轨迹线的算法实现与性能优化技巧,帮助开发者打造极致的倒车体验。

weixin_42550597的博客 255

viewController被POP后不调用dealloc的问题

控制器在被pop后移出栈后会被释放,但有些时候会发现控制器出栈的时候不会调用dealloc方法,归根结底,是因为当前控制器被某个对象强引用了,控制器的引用计数不为0,系统无法帮你释放这部分内存。

心虽远,情未变,乐依然。 1081

python读取并可视化npy格式的深度图文件以及将其保存为jpg图片的方法

  npy文件是无法直接打开的,它里面包含的是一个矩阵格式的数据,可以用于存储图像。为了对其进行可视化,需要将其转换为图像。这里需要用到numpy包以及matplotlib包,没有的话就pip install一下吧。现进入包含有npy文件的目录(我的该目录下有一个名为0000.npy的文件),然后打开一个终端,执行python进入pythn命令行模式,依次输入如下代码即可: import numpy as np import matplotlib.pyplot as plt depthmap = np.lo

zeeq的博客 5万+

2026年紫光同创数字IC笔试试卷带答案

FPGA基础知识与设计要点摘要 本文围绕FPGA与数字IC设计核心概念,通过单选题、波形分析题、多选题和简答题形式,系统梳理了以下关键知识点: FPGA基础架构 查找表(LUT)是实现组合逻辑的基本单元(题1) CLB包含LUT、触发器和进位链,后者加速算术运算(题6,10) 布局布线优化是减少关键路径延迟的核心方法(题7) 时序分析要点 建立时间(时钟沿前数据需稳定)与保持时间(时钟沿后需保持)的定义(题2,简答1) 亚稳态成因及两级同步器处理跨时钟域信号的方法(多选题1,波形题5) 特殊设计技术 异步复

Open 116

关于super dealloc

   昨天的问题总算解决了,   继承UITableViewCell创建自定义单元格,使用的的时候通过调用 [NSBundle mainBundle]loadNibName: objectAtIndex:0得到单元格,但是在刷新表格的时候进入死循环了,通过追踪,发现在单元格那里调用 dealoc那里的时候出现问题了。     原来: -(void)dealloc { [su...

iteye_14743的博客 276

WPF实现棋盘式图片切换效果

实现效果如下: 思路:在自定义控件中放置两个Image控件,点击前后翻页按钮时对图片进行裁剪,随机打乱顺序后添加动作。 步骤: 1、MyImageControl控件 /// <summary> /// MyImageControl.xaml 的交互逻辑 /// </summary> public partial class MyImageControl : UserControl { public static r

dnazhd的博客 1125

黑马程序员——OC基础---语法一

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-一、OC简介OC不是一门全新语言,它是在C语言基础上增加了一层最小的面向对象语法,OC完全兼容C语言,可以在OC代码中混入C语言代码,甚至C++代码,可以使用OC开发mac os x平台和ios平台的应用程序。

kingwang的博客 410

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等

Extends Coc EnhancedC c++ C-like c#     会在github上开源一个库,如果是私有库要交钱,自己o公司的项目不要勾 会把源代码提交上去     //引入头文件 //C中引入头文件的方式 //系统为尖括号<> include 也可以用 //#include //import 引入的头文件可以防止重复包含 include使用预处

wadeAD的博客 1041

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

黑马程序员- IOS学习笔记-OC内存管理学习

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 内存管理学习:  1、retain 计数器+1  2、release 计数器-1  3、retainCount 获取当前的计数器  4、dealloc方法:     *对象销毁前执行的方法,需要释放对象     *一定要调用[super dealloc],要放在最后

lengnuanzizhi365的专栏 491

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

黑马程序员23——OC之内存管理(set方法的内存管理)

#import @interface Car : NSObject {     int _speed; } - (void)setSpeed:(int)speed; - (int)speed; @end #import "Car.h" @implementation Car - (void)setSpeed:(int)speed {     _

miaoran2014的专栏 505

黑马程序员--OC之匿名对象问题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 匿名变量:利用类创建一个对象的时候,没有将对象的地址交给一个指针变量保存,这样的对象称为匿名对象,即没有指针指向的对象。 //匿名变量1 #import  2 //类的声明 3 @interface Car : NSObject4 { 5 @public//表示允许外界指针间接访问对

kkii180的博客 474

黑马程序员 oc随记 写一个手动内存释放

真要命,半天找不到内存泄漏的原因,结果发现是自己把一个类的字母少写了,郁闷。 #import #import "goods.h" #import "selfer.h" #import "buyer.h" int main(int argc, const char * argv[]) { @autoreleasepool { buyer *b=[buyer new];

cpo007的博客 316

黑马程序员-oc与c语言比较的一些高级特性

------- android培训、java培训、期待与您交流! ---------- objective-c高级特性: 1.       继承 Objective-c不支持多继承。 Super 关键字:调用该类的父类; 超类:父类的另一种说法。  2.         自定义NSLog()输出: 在类中添加description方法就可以自定义NSLog()如何输出对象。

qq_22747589的专栏 423

黑马程序员_iOS_OC_创建对象并调用函数

Student.h#import @interface Student : NSObject { //成员变量 学号 NSUInteger _no; //年龄 NSUInteger _age; } //函数声明 -(void)setNo:(NSUInteger)no; -(void)setAge:(NSUInteger)age; //带两个参数的 -(void

xuchunwei1027的博客 388

黑马程序员 初学OC的一些注意总结4(尾)

---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----- -----------------

MeditatingPig的专栏 795

黑马程序员-OC的类和对象的初步认识

OC是面向对象的编程语言,如何创建和使用对象自然是重中之重,对象是怎么产生的呢?创建对象之前必须要有类,他就像要想盖大楼,必须要有图纸,这个图纸就类似于OC中的类 常用的关键字以及其他英文: @interface / @end / @implementation / @public / NSLog(@"") / NSObject -framework Foundation /...

weixin_30849403的博客 137

黑马程序员-OC学习日记2

@property: @property 的作用:定义成员变量,自动帮我们生成set、get方法 @property 的格式:@property (参数1,参数2,参数3)数据类型  变量名 @property    参数: 1、是否要生成set方法(若为只读属性,则不生成) readonly:只读,只会生成getter的声明与实现 readwrite:默认,同时生成s

smile -_-的博客 411

[黑马IOS自学第十篇]OC语言基础,面向对象概念,类学习

类学习引入 //缺点 _result的结果一直在变化 ,得创建变量,在堆区一直申请空间 #import #import "Calculator.h" int main(intargc, const char* argv[]) {     @autoreleasepool {         Calculator *cl = [Calculator new];

wadeAD的博客 740
上一篇: 黑马程序员---学习笔记22:OC基础(9)
下一篇: 黑马程序员---学习笔记24:Foundation框架
七分热度_HD
博客等级 码龄14年 12粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值