『IOS』Objective-C中的@property和@synthesize用法

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令) 本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。 阅读详情

原文地址:http://flandycheng.blog.51cto.com/855176/556179/


Objective-C语言关键词,与@synthesize配对使用。

  功能:让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。
  如:
  1、在头文件中:
  @property int count;
  等效于在头文件中声明2个方法:
  - (int)count;
  -(void)setCount:(int)newCount;
  2、实现文件(.m)中
  @synthesize count;
  等效于在实现文件(.m)中实现2个方法。
  - (int)count
  {
  return count;
  }
  -(void)setCount:(int)newCount
  {
  count = newCount;
  }
  以上等效的函数部分由编译器自动帮开发者填充完成,简化了编码输入工作量。


这样讲操作封装起来,自然有好处了,再看一篇:


原文地址:http://moto0421.iteye.com/blog/1577459


我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一个比较基本的问题,也关乎我们理解Objective-C中对类、类的属性、类的存取器、类的局部变量的统一理解。
在32位系统中,如果类的 @interface 部分没有进行 ivar 声明,但有 @property 声明,在类的 @implementation 部分有响应的 @synthesize,则会得到类似下面的编译错误:
Synthesized property 'xX' must either be named the same as a compatible ivar or must explicitly name an ivar
在 64-bit时,运行时系统会自动给类添加 ivar,添加的 ivar 以一个下划线"_"做前缀。
上面声明部分的 @synthesize window=_window; 意思是说,window 属性为 _window 实例变量合成访问器方法。
也就是说,window属性生成存取方法是setWindow,这个setWindow方法就是_window变量的存取方法,它操作的就是_window这个变量。通过这个看似是赋值的这样一个操作,我们可以在@synthesize 中定义与变量名不相同的getter和setter的命名,籍此来保护变量不会被不恰当的访问。

下面是一个常见的例子
写法一:
C代码  收藏代码
  1. @interface MyClass:NSObject{    
  2.         MyObjecct *_myObject;  
  3. }  
  4. @property(nonamtic, retain) MyObjecct *myObject;  
  5. @end  
  6.   
  7. @implementatin MyClass  
  8. @synthesize myObject=_myObject;  
 

写法二:
C代码  收藏代码
  1. @interface MyClass:NSObject{  
  2.         
  3. }  
  4. @property(nonamtic, retain) MyObjecct *myObject;  
  5. @end  
  6.   
  7. @implementatin MyClass  
  8. @synthesize myObject=_myObject;  
 
这个类中声明了一个变量_myObject,又声明了一个属性叫myObject,然后用@synthesize生成了属性myObject的存取方法,这个存取方法的名字应该是:setmyObject和getmyObject。@synthesize myObject=_myObject的含义就是属性myObject的存取方法是做用于_myObject这个变量的。这种用法在Apple的Sample Code中很常见。
弄明白了这个语句的意思之后,我们也就清楚了myObject和_myObject的区别,那么,在使用的时候,有什么需要注意的地方,大家应该也都清楚了。是的,myObject是属性,而_ myObject才是变量,我们最终操作的变量都是myObject。
那么,同样是存取操作,语句
C代码  收藏代码
  1. self.nameVarPtr = [[ObjectName alloc] init]   
 
C代码  收藏代码
  1. nameVarPtr = [[ObjectName alloc] init]  
两种赋值方式的区别何在呢?

 

self.nameVarPtr=xxx 这种赋值方式等价于调用 [self setnameVarPtr:xxx], 而setnameVarPtr:xxx的方法的实现又是依赖于@property的属性的,比如retain,assign等属性。


nameVarPtr = xxx 的赋值方式,仅仅是对一个指针进行赋值。nameVarPtr仅仅是一个指针变量,记录了xxx的地址。在这个过程中不会调用setter方法,不会调用setter方法,就和@property没有关系,从而,也和retain,assign等属性没有关系。这种赋值方式就是一个简单的指针赋值。


综上,对成员变量进行赋值,为防内存泄露需要注意的点:

1.self调用setter方法的方式

ObjectName*  tmp= [[ObjectName alloc] init];

self.nameVarPtr =tmp;                 //retainCount=2

[tmp release];                               //retainCount=1


2.指针赋值方式,不会调用setter方法

nameVarPtr= [[ObjectName alloc] init]; // retainCount=1


所以,笔者建议大家在对某个变量进行赋值操作的时候,尽量要写self.myObj = xxx; 这才是最可靠的方法。


使用YubiKey进行全盘加密、加密启动分区以及利用UEFI安全启动的详细指南 在本教程中,我们将使用YubiKey来增强电脑的安全性,通过加密整个硬盘,确保只有持有正确YubiKey的人才能访问。UEFI安全启动是一种在UEFI固件级别实施的安全标准,确保计算机仅启动签名的启动加载程序。为了符合您的要求,我将以此方式分配内容,确保每部分都有详尽的说明和代码。现在,您已经成功地使用YubiKey设置了全盘加密,并使用UEFI安全启动为系统增加了额外的安全层。注意:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。注意:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。 阅读详情

相关推荐

告别CAPL编程!用Matlab/Simulink+CANoe实现复杂ECU仿真的5个技巧

本文介绍了如何利用Matlab/Simulink与CANoe进行联合仿真,以替代复杂的CAPL编程,高效实现复杂ECU仿真。文章分享了5个核心技巧,涵盖信号映射、模型编译集成、实时参数调整、性能优化及数据分析,帮助算法工程师构建稳定强大的仿真环境,显著提升开发与测试效率。

rgv234567的博客 296

Pyside6多线程实现对linux主机进行巡检

pyside/pyqt多线程解决页面无影响,动态实现参数的传递

1719

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

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

weixin_42557803的博客 490

python之面向对象类空间问题以及类之间的关系

类的空间问题 对象的属性不仅可以在__init__中添加,还可以在类的其他方法和类的外面添加 class Human: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex # 类的外面: obj = Human('铁憨憨') obj....

aflqh04282的专栏 139

手把手教你用OpenRouter免费模型:从DeepSeek V3.1到Llama 3.3的实战指南

本文详细介绍了如何利用OpenRouter平台免费接入DeepSeek V3.1、Llama 3.3等53个AI模型,提供从账号注册到实战应用的完整指南。通过文本摘要、客服对话生成和代码生成等具体案例,帮助开发者高效利用免费模型资源,提升AI应用开发效率。

weixin_29258297的博客 3557

如何从Matlab工作区读取数据,并按时序将数据输入Simulink中

如何从Matlab工作区读取数据,并按时序将数据输入Simulink中 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍

weixin_44899540的博客 1万+

python里面的面向对象

一、什么是面向对象(oop:object oriented programming) 面向过程:侧重于怎么做 1.把完成某一个需求的 所有步骤 从头到尾 逐步实现 2.根据开发要求,将某些功能独立的代码封装成一个又一个函数 3.最后完成的代码,就是顺序的调用不同的函数 特点: 1.注重步骤与过程,不注重职责分工 2.如果需求复杂,代码会变得很复杂 3.开发复杂项目,没有固定的套路,开发难度很...

qq_42224396的博客 215

NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()

Please use torch.nn.Module.to_empty() instead of torch.nn.Module.to()输出(llama) (base) [root@localhost home]# nvidia-smi Unable to determine the device handle for GPU0000:09:00.0: Unknown Error。这是典型的“孤儿进程”,但它还是。(僵尸进程),占用 GPU 资源。如果进程仍然不消失,并且。,这意味着它的父进程是。

m0_61636632的博客 2096

【Objective-C】iOS开发中常见的语句@synthesize obj=_obj的意义详解

我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一个比较基本的问题,也关乎我们理解Objective-C中对类、类的属性、类的存取器、类的局部变量的统一理解。 在32位系统中,如果类的 @interface 部分没有进行 ivar 声明,但...

Elite, not coder 207

从零开始之stm32之CAN通信

CAN通信极简教程(小白友好版),从小白的视角了解并实现简单的STM32F103的CAN通信,直接上手。

qq_30993593的博客 1306

损失函数大汇总(八)(IoU Loss附公式推导与代码)

本文详细介绍了IoU Loss及其在图像分割中的应用。IoU(交并比)是衡量预测区域与真实区域重叠程度的指标,IoU Loss定义为1-IoU,直接优化区域重叠质量。文章推导了IoU的数学表达式和梯度计算,分析了其函数特性:全局耦合梯度、对漏检误检的双重惩罚、适合类别不平衡任务。与Dice Loss相比,IoU更强调覆盖质量而非相似度。实际应用中IoU Loss常与BCE组合使用,前者保证训练稳定性,后者优化整体区域质量。文章还提供了IoU Loss的代码实现,适用于二值分割、小目标提取等场景,特别当任务评

悦学共鸣,温柔以待,汇聚光芒,共同成长 414

python面向对象编程教程入门_Python面向对象编程基础

面向对象关键词:类,对象,实例,方法面向对象三大特性:封装,继承,多态class Foo: # 定义类名def f1(self): # f1方法print("success")obj = Foo() # 创建对象obj.f1() # 通过对象执行方法类和对象的关系:self参数是一个Python自动会传值的参数,那个对象执行方法,self就是那个class...

weixin_32176655的博客 243

uniapp APP端:蓝牙报错writeBLECharacteristicValue:fail property not support(uni.writeBLECharacteristicVal)

uni-app 蓝牙fail property not support、发现不了服务特征值的问题、突然发现微信蓝牙小秘密,使用uni-app编译成安卓APP后报错writeBLECharacteristicValue:fail property not support,发现不了服务特征值,uniApp APP调用蓝牙API发送指令过快导致,uniapp 蓝牙 writeBLECharacteristicValue property_not_support iOS Android BLE GATT 特征值写入

✅ 精选推荐文章 2943

[ios]Objective-C中的@property和@synthesize用法

@代表“Objective-C”的标志,证明您正在使用Objective-C语言   Objective-C语言关键词,@property与@synthesize配对使用。   功能:让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。   如: 1、在头文件中: C代码   @property int count;

超级方的专栏 609

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IOS学习之Objective-C中的@property和@synthesize用法

@代表“Objective-C”的标志,证明您正在使用Objective-C语言   Objective-C语言关键词,@property与@synthesize配对使用。   功能:让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。   如: 1、在头文件中: C代码   @property int count;

南北雪树的专栏 474

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IOS笔记(三)——Objective-C中的@property和@synthesize用法

概念:Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略 功能:让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。这让我想到了java中用到的lombok ,通过注解的方式来减少代码的冗余,实际编译时由编译器去解释。(lombok官网:http://projectlombok.org/) 格式:@

Jerome's Zone 3321

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IOS入门:Objective-C中的@property和@synthesize用法

@代表“Objective-C”的标志,证明正在使用Objective-C语言   Objective-C语言关键词,@property与@synthesize配对使用。   这篇文章是转载的,这里说说我自己的理解:@property是写在.h文件里的,与.h文件的功能相呼应,它只是起到一个声明的作用。具体的实现是要放在.m文件里,由@synthesize来标记。这两个关键

花凌的博客 729

第二章、Objective-C中的@property、@synthesize和dynamic的用法(iOS学习笔记,从零开始)

*以下博文来自 http://justcoding.iteye.com/blog/1444548 非常敬佩作者的分享精神。 @代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用。 功能:让编译器自动编写一个与数据成员同名的方法声明来省去

郭晓东的专栏 9358

@property中的变量与_

Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略 下面以 Person 类为例: 在. h 文件中: @interface Person : NSObject { NSString * _name; NSString * _sex; NSInteger _age; } @property NSStr

im5437的专栏 743

5、OC —— @property和@synthesize

为什么80%的码农都做不了架构师?>>> ...

weixin_34001430的博客 123

iOS开发-学习笔记-属性

属性是怎么达到减少代码数量的作用的 使用属性关键字,不需要太多的方法定义语句,因为多个方法里面可能都有相同属性的字段定义,只要使用属性关键字,不同的方法都可以对这个属性进行设置和访问. 头文件中这样使用: #import <Foundation/Foundation.h> #import "Tire.h" @interface AllWeatherRadial : Tire { float rainHanding; float snowHanding; } @property float r

qq_48946910的博客 411

Objective-C中的@property和@synthesize用法

@代表“Objective-C”的标志,证明您正在使用Objective-C语言Objective-C语言关键词,@property与@synthesize配对使用。功能:让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。如:1、在头文件中: @property int count; 等效于在头文件中声明2个方法: - (int)count; -(void)setC

断不了的弦的专栏 916

iOS学习笔记3-iOS中@property和@synthesize的用法

本文作为ios学习过程中的一个重要知识点的笔记:@property和@synthesize

小小小的骆驼的前端技术博客 968

Objective-C 之 @property和@synthesize

很容易初学ios基础知识的巩固和理解,推荐,也谢谢文章作者辛苦的整理下来分享给大家

tn0521的专栏 619

【iOS】iOS中的 @property和@synthesize用法

@代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用。 功能:让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。 如: 1、在头文件中: C代码   @property int count;  

u014395105的专栏 592
上一篇: 『IOS』ios多工程依赖
下一篇: 『IOS』mac svn 命令
fallenink
博客等级 码龄16年 76粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值