热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OC点语法介绍和使用以及@property关键字

使用点语法Person*p[Personnew];点语法对象.属性名注意,此时(p.age)并不是直接方法实例对象而是xcode可能到点语法(p.age)后,会帮我们自动

使用"点语法"

Person *p =[Person new];//点语法
//对象.属性名
//注意,此时 (p.age)并不是直接方法实例对象
//而是xcode可能到点语法(p.age)后,会帮我们自动替换
//p.age --替换--->[p setAge:18]
p.age=18;//注意.此处 p.age出现在了等号的右侧
//设计上,当xcode 看到了p.age出行在等号的右侧后
//它会帮我们把p.age---替换成--->[p age];
int a= p.age;
NSString *s =[p name];

  

@property

@property是编译器的指令
编译器指令: 就是告诉编译器要作什么
@property 告诉编译器 声明属性的访问器(getter/setter)方法好处:免去我们手工书写get和set方法繁琐的代码

  

@property用法

格式:
@property 类型名 实例变量名

  

用法:

1 1.在xcode4.4 之前,用于帮我们实现get/set方法的声明
2 2.在xcode 4.4之后,有稍微增强

 

  

使用注意:

1 1.@property只能写在@interface @end中
2 2.@property 用来自动生成成员变量的 get/set方法声明(xcode4.4 以前)
3 告诉property要生成的get/set 方法声明的成员变量类型是什么
4 告诉property要生成的get/set 方法是哪个属性的,属性名称去掉下划线
5
6 如果写成了 @property int _age;
7 Person *p =[Person new];
8 p.age 就拿不到了
9 p._age;
10

 

  

@property 增强使用

1   Xcode4.4版本以后支持的
2   只使用 @property进行声明,类会自动帮你实现
3   操作的是带有下划线的实例变量
4
5   如果没有手动声明成员变量,property会在.m文件中自动帮我们生成一个_开头的成员变量
6
7   注意; 这个实例的生成与.m文件 是私有不能被子类使用的
8       get和set方法在.m中可以自己手动实现,但是当用增强时,get 、set只能手动实现一个

 

@property参数

1 格式:
2   @property(参数1,参数2) 数据类型 方法名
3  参数类型      参数        说明
4 原子性      atomic        对属性加锁,多线程下线程安全,默认值
5           nonatomic      对属性不加锁,多线程下不安全,但是速度块
6 读写属性     readwrite      生成getter、setter ,默认值
7          readonly       只生成getter方法
8 方法处理     assign        直接赋值,默认值
9           retain        先release原来的值,再retain新增
10           copy         先release原来的值,再copy新增
11
12
13   @property(assign) int age;
14   int _age;
15   -(void)setAge:(int)age{
16     _age = age;
17   }
18
19   @property (retain) Car * car;
20   Car _car;
21   -(void)setCar:(Car)car{
22     if(_car!=car){
23       [_car release];
24       _car =[car retain];
25     }
26   }
27
28 1)内存管理相关参数
29   retain:对对象release旧值,retain新值 (适用于OC对象类型)
30   assign:直接赋值(默认,适用于非oc对象类型);
31   copy : release旧值,copy新值
32
33   @property ( nonatomic,assign) Car *car;
34
35 例如:在color的get set方法中修改age的值
36   @property(nonatomic,setter=setColor:,getter=color) int age;

 

  

转:https://www.cnblogs.com/developer-wang/p/4500412.html



推荐阅读
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
李雪萱849
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有