面向对象7

5、探索C 7.0:深入理解面向对象编程与核心特性 本文深入介绍了C# 7.0的核心特性和面向对象编程的基础概念,涵盖数据类型、控制流语句、数组、方法和参数、类和对象等基础内容,并探讨了泛型、委托、事件、Lambda表达式、异步编程、LINQ查询、动态绑定、运算符重载、属性、调用者信息属性、不安全代码和指针、预处理器指令以及XML文档注释等高级主题。帮助开发者更好地理解和掌握C# 7.0,从而在日常开发中更加得心应手。 阅读详情

手动内存管理

OC可用内存回收机制有如下3种:

  • 手动引用计数和自动释放池
  • 自动引用计数(ARC——Automatic Reference Counting)
  • 自动垃圾回收
    PS: IOS只支持前两者,另外需要注意的是,OC中的内存管理机制是统计引用计数,当引用计数为0时会触发对象的dealloc方法来销毁对象,从而释放内存。

引用计数方法:

  • -retain: 将该对象的引用计数器+1
  • -release: 将该对象的引用计数器-1
  • -autorelease: 不改变对象的引用计数器的值,只是将对象添加到自动释放池中
  • retainCount: 返回该对象的引用计数的值
//接口部分忽略,自行编写,以下为实现部分
@implementation MyUser
- (void) setItem:(MyItem*) item
{
    if(_item != item)
    //将_item原引用的实例计数器-1,此处主要考虑到更新值时的逻辑
    [_item release]
    //新实例item计数器+1
    [item retain];
    _item = item;    //也可用 _item = [item retain]
}
- (void) dealloc    //重写MyUser的dealloc方法
{
    //销毁MyUser实例时,将item的计数器-1,以销毁item对象
    [item release];
    [super dealloc];
}

使用自动释放池

MyItem* productItem()
{
    MyItem* item = [MyItem new];  //引用计数为1
    NSLog(@"函数返回之前的引用计数:%ld", item.retainCount);
    //autorelease不会改变对象的引用计数,但程序执行autorelease时会将该对象添加到自动释放池中
    return [item autorelease];
}
int main(int argh, char* argv[])
{
    //定义自动释放池pool
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    //通过productItem()函数获得MyItem对象,由于productItem()函数中将对象放入了自动释放池中,所以此处返回值成功,it的计数器为1
    MyItem* it = productItem();
    NSLog(@"it的引用计数为:%ld", it.retainCount);
    //创建一个MyUser对象病添加到自动释放池中
    MyUser* user = [[[MyUser alloc] init] autorelease];
    NSLog(@"%ld", user.retainCount);
    [pool release];    //释放自动释放池pool
}

临时对象

Foundation类中,当调用方法创建对象时,若不是以alloc、new、copy、mutableCopy开头的,系统都会默认创建自动释放的对象,这些对象会在释放自动释放池时,自动释放,被称为临时对象。

如果程序需要在事件处理结束之后依然保留临时对象:

  • 将临时对象赋值前,用retain方法使引用计数+1
  • 把临时对象赋值给retain、strong、copy修饰的属性

手动管理内存的规则总结

  • 调用release方法不是销毁对象,只是将计数-1,当对象的引用计数为0时,系统会自动调用该对象的dealloc方法来销毁该对象
  • 当自动释放池回收时,会依次调用池中每个对象的release方法来使其引用计数-1,之后若引用计数为0则销毁,若大于0则会存活下来
  • 当程序使用alloc、new。copy、mutableCopy开头的方法创建对象后,该对象的引用计数为1,当不再使用该对象时,需要调用该对象的release火autorelease方法
  • 对象的retain和release方法的调用次数应该相等
  • 对于临时对象,多想在释放自动释放池之后保留临时对象,则需要手动调用retain来增加该临时对象的引用计数,或者将该临时对象赋值给retain、strong、copy修饰的属性

自动引用计数

启用ARC,并用 -fobjc-arc 编译,系统会自动管理好内存。
@autoreleasepool{} 块中都会有ARC来自动释放

《YOLOv8实例分割实战:训练自己的数据集 》(视频课程) 本课程将手把手地教大家使用labelme标注和使用YOLOv8训练自己的数据集,完成一个多目标实例分割实战项目。 阅读详情

相关推荐

[Vue][面试]谈谈你对MVC、MVP和MVVM的理解

谈谈你对MVC、MVP和MVVM的理解 答题思路:此题涉及知识点很多,很难说清楚,说透彻,因为MVC,MVP这些我们前端程序员自己甚至都没用过。但是恰恰反映了前端这些年从无到有, 从有到优的变迁过程,因此沿此思路回答将十分清除。 Web1.0时代 在web1.0时代,并没有前端的概念。开发一个web应用多数采用ASP.NET/Java/PHP编写,项目通常由多个aspx/jsp/php文件构成,每个文件中同时包含了HTML、CSS、JavaScript、C#/Java/PHP代码, 系统整体架构可能如下图所

你好,欢迎光临! 723

面向对象7大原则

单一职责:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 开放闭合原则:开闭原则就是指软件实体应当尽量保证在不修改原有代码的情况下,对软件进行扩展。开闭原则是面向对象设计的基石。 里氏替换原则:根据“运行时子类对象覆盖父类对象”的特点保证继承关系的正确性 依赖倒置:1)抽象不依赖细节,细节依赖抽象(面向接口的一种体现形式)2)高级模块不依赖于低层模块,应该二者依赖于抽象 ...

u011791378的专栏 898

STM32与FreeRTOS:基于TIM6的高精度系统时间获取实践

本文详细介绍了在STM32与FreeRTOS环境下,基于TIM6定时器实现高精度系统时间获取的实践方法。通过复用FreeRTOS的TIM6硬件资源,开发者可以高效获取毫秒级和微秒级系统时间,同时解决时间溢出和中断处理等关键问题。文章还提供了CubeMX配置技巧、代码实现及性能优化建议,适用于嵌入式系统开发中的精确时间管理需求。

weixin_29169505的博客 357

面向对象七大基本原则

一,单一职责原则(类) 单一职责原则的英文名称是Single Responsibility Principle,简称SRP。它的定义是:就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数、数据的封装。 二,开闭原则(类、模块、函数等) 开闭原则的英文全称是Open Close Principle,简称OCP,它是Java世界里最基础的设计原则,它指导我们...

qq_35386002的博客 2993

Allegro23.1新功能之软件自带阻抗计算工具操作指导

Allegro升级到了23.1后,软件新增了一个自带阻抗计算的功能,如下图。Propagation velocity:传输速度,单位是光速的多少倍。Dielectric constant输入介电常数,这里使用常规4。新功能之软件自带阻抗计算工具。如何使用,具体操作如下。

weixin_54787054的博客 782

海思3403烧结、复用及mic输入

3403调试的第一步是版本烧结,版本烧结经常遇到问题,本文记录总结遇到的各种问题。

平面到立体 1353

【JAVA】面向对象设计七个原则

程序是为需求服务的,需求无时无刻都有可能变更,最好一开始就依托一套优秀原则来设计程序,以下介绍面向对象设计的七个原则。

千山牧雪的专栏 4236

倍福EL6002做RS232通信获取称重数据..

本文介绍EL6002模块通过RS232自由口通信协议获取从站数据。具体数据对照说明手册即可。

weixin_41883890的博客 1010

视频教程-PHP7面向对象进阶-PHP

PHP7面向对象进阶 江湖花名"King"全栈工程师,开发工程师。曾就职于达...

weixin_30046429的博客 299

081、LLC谐振变换器的短路特性与保护

本文深入分析了LLC谐振变换器在短路工况下的特性与保护策略。作者通过实际案例指出,LLC在输出短路时会出现谐振电流失控、ZVS条件丧失等危险现象,导致MOS管炸毁。文章详细阐述了短路保护的三大难点:响应速度、频率与电流的耦合、重启策略,并提出了硬件级快速保护、频率快速拉升、打嗝模式等实用解决方案。作者分享了关键参数设计经验,包括电流检测阈值设置、最高频率限制和保护响应时间控制,并通过实测波形验证了保护效果。最后总结出五点重要经验,强调硬件保护的必要性和系统设计的注意事项,为LLC变换器的短路保护设计提供了有

Jack010169的博客 73

SAP成本核算的核心逻辑

SAP成本核算采用"计划-归集-分析"闭环管理,以CO模块为核心,集成PP、MM等模块。核算前需配置标准成本控制范围、成本中心等主数据。标准成本通过BOM和工艺路线计算(CK11N),采购和生产过程记录实际成本差异。制造费用通过成本中心归集,作业成本按实际耗用量分配。完工产品按标准成本入库,月末通过KO88结算工单差异,物料分类账(CKMLCP)还原实际成本。整个流程实现FI与CO数据同步,确保账务一致。关键事务码包括CK11N(成本估算)、MIGO(物料移动)、CO11N(报工)等。

金牌架构师 535

Python3.7 面向对象.继承

Python3.7 面向对象.继承 面向对象编程的一个优势就是:对代码的重用! 继承最好是想象成类之间实现类型与子类型的工具 代码实现 被继承类 class SchoolMember: '''代表任何学校里的成员''' def __init__(self, name, age): self.name = name self.age = age...

lpZhouYi的博客 887

【精品5万字图文详解】特征平台建设方案与最佳实践

关键词:特征工程、特征平台、特征存储、特征服务、机器学习、数据工程摘要:本文全面介绍了特征平台的建设方案与最佳实践,从特征工程的基本概念出发,深入剖析了特征平台的核心组件、架构设计和实现方法。文章通过生动的类比和实例,使读者能够轻松理解特征工程的重要性及特征平台如何解决企业在机器学习过程中面临的数据管理挑战。同时,详细探讨了主流开源特征平台的对比分析、系统设计要点、实际落地案例以及未来发展趋势,为企业构建高效特征平台提供了全面的指导和参考。想象一下,小明是一位热爱烹饪的小学生。有一天,他想做一道美味的菜肴送

AI天才研究院 952

视频教程-PHP7面向对象实战-PHP

PHP7面向对象实战 江湖花名"King"全栈工程师,开发工程师。曾就职于达...

weixin_30045871的博客 283

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

7 python 面向对象总结

面向对象基础 目标 理解面向对象 类和对象 添加和获取对象属性 魔法方法 一. 理解面向对象 面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想。 例如:洗衣服 思考:几种途径可以完成洗衣服? 答: 手洗 和 机洗。 手洗:找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 拧干水 - 倒水 - 漂洗N次 - 拧干 - 晾晒。 机洗:打开洗衣机 - 放衣服 - 加洗衣粉 - 按下开始按钮 - 晾晒。 思考:对比两种洗衣服途径,同学们发现了什么? 答:机洗更简单 思考:机洗,只需要找到一台洗衣

qq_41246557的博客 317

假人有限元模型

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

面向对象7大基本原则

原则归纳目的开闭原则对扩展开放,对修改关闭降低维护带来的新风险依赖倒置原则高层不应该依赖低层,要面向接口编程更利于代码结构的升级扩展单一职责原则一个类只干一件事,实现类要单一便于理解,提高代码的可读性接口隔离原则一个接口只干一件事,接口要精简单一功能解耦,高聚合、低耦合迪米特法则不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度只和朋友交流,不和陌生人说话,减少代码臃肿里氏替换原则不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义。

qq_40249026的博客 1138

7个面向对象设计原则

1.7个重要的面向对象设计原则 7个常用的面向对象设计原则 设计原则名称                             定义 使用频率 单一职责原则 一个对象应该只包含单一的职责, 并且该职责被完整地封装在一个  类中 ★ ★ ★ ★ ☆ 开闭原则 软件实体应当对扩展开放,对修改 关闭 ...

天地一蜉蝣 393

7 个面向对象的好习惯

在 PHP 编程早期,PHP 代码在本质上是限于面向过程的。过程代码 的特征在于使用过程构建应用程序块。过程通过允许过程之间的调用提供某种程度的重用。但是,没有面向对象的语言构造,程序员仍然可以把 OO 特性引入到 PHP 代码中。这样做有点困难并且会使代码难于阅读,因为它是混合范例(含有伪 OO 设计的过程语言)。使用 PHP 代码中的 OO 构造 — 例如能够定义和使用类、能够构建使...

weixin_30405421的博客 135

在 PHP 中养成 7 个面向对象的好习惯

如果您尚未打算用 OO 原则创建应用程序,则使用 PHP 的面向对象(OO)的语言特性,这 7 个习惯将帮助您开始在过程编程与 OO 编程之间进行转换。 在 PHP 编程早期,PHP 代码在本质上是限于面向过程的。过程代码 的特征在于使用过程构建应用程序块。过程通过允许过程之间的调用提供某种程度的重用。 但是,没有面向对象的语言构造,程序员仍然可以把 OO 特性引入到 PHP 代码中。这样做有...

weixin_30571465的博客 81

7. 面向对象

文章目录1. 面向对象基础1. 理解面向对象2. 类和对象2.1 理解类和对象2.1.1 类2.1.2 对象2.2 面向对象实现方法2.2.1 定义类2.2.2 创建对象2.2.3 self3. 添加和获取对象属性3.1 类外面添加对象属性3.2 类外面获取对象属性3.3 类里面获取对象属性4. 魔法方法4.1 `__init__()`4.1.1 体验`__init__()`4.1.2 带参数的`__init__()`4.2 `__str__()`4.3 `__del__()`5. 综合应用5.1 烤地

weixin_41547423的博客 1086

面向对象的7大设计原则

示例系统整合:数控系统通过上述原则实现模块化、可扩展的架构,例如新增运动类型(OCP)、传感器替换(LSP)、日志组合(CRP)等场景。定义:软件实体应对扩展开放,对修改关闭。说明:避免将温度监控和运动控制耦合在同一个类中[4][5]。说明:通过组合复用功能,避免继承导致的僵化[5][8]。说明:通过继承扩展新运动类型,无需修改原有代码。定义:高层模块不应依赖低层模块,二者应依赖抽象。说明:通过依赖注入解耦高层与具体存储实现。定义:客户端不应被迫依赖其不使用的接口。定义:对象应减少与其他对象的直接交互。

強雲的博客 505

php7新特性(二):面向对象部分

1)、PHP 7 支持new class 来实例化一个匿名类这可以用来替代一些"用后即焚"的完整类定义。 2)、Closure::call():将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数 3)、use:可以使用一个 use 从同一个 namespace 中导入类、函数和常量: 4)、面向对象中移除的特性: ①成员函数名不能与它的类名相同 ②以静态的方式调用非静态...

xppbin的博客 775

7.15 Linux内核的面向对象思想:封装(上)

7.15 Linux内核的面向对象思想:封装(上) 字符设备 ./fs/char_dev.c 用到了 include/linux/cdev.h struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned i

yzm65580952的博客 244

7种面向对象设计原则

向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。面向对象设计原则也是我们用于评价一个设计模式的使用效果的重要指标之一,在设计模式的学习中,大家经常会看到诸如“XXX模式符合XXX原则”、“XXX模式违反了XXX原则”这样的语句。 7种常用的面向对象设计原则 设计原则名称 定

gaoxin12345679的专栏 589

Python的面向对象day7

语法格式1:# 公共的属性passpasspass语法格式2:# 公共的属性passpasspass实例化对象的语法:1》无参对象名 = 类名()2》有参对象名 = 类名(参数列表)

m0_67609958的博客 1546
上一篇: 面向对象6
下一篇: Foundation框架解析
无良剑染
博客等级 码龄11年 3粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值