当前位置: 首页 > news >正文

重写setter方法要小心递归调用

错误的重写

// 假设SQIPerson有一个子类叫做SQISmithPerson, 专门表示那些姓"Smith"的人, 重写了 lastName 属性对应的设置方法
- (void)setLastName:(NSString *)lastName {if (![lastName isEqualToString:@"Smish"]) {[NSException raise:NSInvalidArgumentException format:@"Last name must be Smith"];}// 会引起递归调用self.lastName = lastName;
}

《Effective Objective-C 2.0》第 7 条中就犯了这个低级错误

更新后正确的setter

// 假设SQIPerson有一个子类叫做SQISmithPerson, 专门表示那些姓"Smith"的人, 重写了 lastName 属性对应的设置方法
- (void)setLastName:(NSString *)lastName {if (![lastName isEqualToString:@"Smish"]) {[NSException raise:NSInvalidArgumentException format:@"Last name must be Smith"];}[super setLastName:lastName]; // 使用super调用父类的setter方法, 而不是self.lastName = lastName;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享
  • 25.逢七必过
  • Docker 学习总结(83)—— 配置文件daemon.json介绍及优化建议
  • python学习 - 在线 百度语音API 播报 测试案例分析
  • 二叉树最大宽度
  • 论文略读:Onthe Expressivity Role of LayerNorm in Transformers’ Attention
  • Spark MLlib机器学习
  • 安全高效海外仓系统:中小海外仓标准化管理的第一步
  • 开机自启动脚本配置
  • Java 期末复习 习题集
  • VS2022+Qt雕刻机单片机马达串口上位机控制系统
  • C++三大特性之继承,详细介绍
  • Yolov9比其他yolo版本的改进
  • 设计与实现完整的余额充值系统
  • MySQL之多表查询—列子查询
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • eclipse的离线汉化
  • JavaScript设计模式系列一:工厂模式
  • java正则表式的使用
  • js继承的实现方法
  • LintCode 31. partitionArray 数组划分
  • Material Design
  • Node + FFmpeg 实现Canvas动画导出视频
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • ReactNativeweexDeviceOne对比
  • 判断客户端类型,Android,iOS,PC
  • 如何利用MongoDB打造TOP榜小程序
  • 微信公众号开发小记——5.python微信红包
  • 详解移动APP与web APP的区别
  • 学习使用ExpressJS 4.0中的新Router
  • 回归生活:清理微信公众号
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # Kafka_深入探秘者(2):kafka 生产者
  • #android不同版本废弃api,新api。
  • (19)夹钳(用于送货)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)原生js案例之数码时钟计时
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (十) 初识 Docker file
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)stm32之通信协议
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转载)Linux 多线程条件变量同步
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 连接数据库,通过数据库生成Modell
  • .Net Core 中间件验签
  • .NET 表达式计算:Expression Evaluator
  • .NET 反射 Reflect
  • .NET 中创建支持集合初始化器的类型
  • .NET周刊【7月第4期 2024-07-28】
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用