一、属性分为三大类

1、读写性控制

a.readOnly只读,只会生成get方法,不会生成set方法

b.readWrite可读可写,会生成set方法,也会生成get方法(默认设置)

2、setter相关修饰符

a、assign:表示直接赋值,用于基本数据类型,包括id类型,这个修饰符不会牵涉到内存管理,但是如果是对象类型,使用此修饰符则可能会导致内存泄露

b、retain:针对对象类型进行内存管理,如果对基本数据类型使用,则X-code会直接报错,当给对象类型使用此修饰符时,setter方法会先将旧的对象属性release掉,在对新的对象进行一次赋值并进行一次retain操作;

c、copy:主要用在NSString类型,表示赋值内容

系统默认属性是assign,retain是指针的复制不重新分配内存空间,copy是内容的复制;

3、原子性属修饰符:atomic | nonatomic

atomic:表示是线程安全的

nonatomic:表示是非线程安全的,使用此属性性能会提高一些

系统默认是atomic

4、getter和setter修饰符

这两个属性修饰符用于社差自定义生成的getter和setter方法名,使用之后将不再使用系统默认的setter和getter方法名;

1、在头文件中用@property声明一个属性名,编译器会自动为我们转换成这个属性名的getter方法和setter方法。

2、在实现文件中使用@synthesize propertyName,编译器先会查找这个属性名的setter方法和getter方法有没有被人为实现,如果已经实现,则不再实现,如果没有,则会帮我们生成一个属性命的setter方法和getter方法。

3、当在实现文件中使用了@synthesize propertyName,编译器还会做一件事情,在类成员变量中查找一个名为_propertyName的成员变量,如果没有,再继续查找名为propertyName的成员变量,如果这两个都没有,编译器会自动为我们生成一个私有的名为_propertyName的成员变量。注意,系统自动创建的都是私有的。

4、当在实现文件中这样写@synthesize propertyName = varName;时,setter和getter方法所对应的是一个名为varName的成员变量,修改和读取的是varName成员变量的值。

5、当我们在实现文件中不写@synthesize propertyName时,在Xcode 4.5之前的版本不会帮我们自动实现setter和getter方法,系统当然也不再会为我们生成对应的成员变量。但是在Xcode 4.5之后可以不用写@synthesize了,就跟3、4一样了。

6、当我们既定义了@synthesize,又在实现文件中人为重写setter和getter方法时,那么@synthesize将不再工作,也就不会为我们创建没有定义的_propertyName成员变量了,这时候如果在setter和getter方法中调用_propertyName将会发生编译错误

iOS开发之--属性关键字以及set和get方法的更多相关文章

  1. iOS开发-automaticallyAdjustsScrollViewInsets属性

    iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...

  2. iOS开发——总结篇&关键字介绍

    关键字介绍 在做iOS开发中,系统的各个关键字处处都是,但是未必每一个关键字都是那么的明白,所以罗列出一些关键字供大家互相学习,有不完善之处请指正,谢谢 atomic atomic是Objc使用的一种 ...

  3. iOS开发中各种关键字的区别

    1.一些概念 1.浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. 2.atom ...

  4. iOS开发-获取属性和方法

    iOS开发数据存储有两种方式,属性列表和对象编码,属性列表可以通过NSArray,NSMutableArray,NSMutableDictionary,存储对象我们可以通过归档和解档来完成.如果我们想 ...

  5. iOS开发控制器之间传值的几种小方法

    在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...

  6. Hello_IOS ios开发transform属性

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...

  7. ios开发transform属性

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...

  8. iOS开发 -------- transform属性(形变)

      一 transform属性 在OC中,通过transform属性可以修改对象的平移,比例和旋转角度 常用的创建transform结构体的方法分两大类 (1) 创建"基于控件初始位置&qu ...

  9. iOS开发UI中懒加载的使用方法

    1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载 ...

随机推荐

  1. reduce方法简单实现数组中对象去重

    js数组的reduce方法,接收一个函数(必须)和指定的初始值(非必须)作为参数,函数有三个参数,分别为初始值,当前项,当前数组,进行累加或者累积操作,初始值为每次累加或者累计后的结果 注意:在ie9 ...

  2. [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试),长期有效

    [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试方向),长期有效 高级测试工程师(性能/自动化方向) 1.负责性能测试计划,性能需求分析,性能测试方案和用例设计,搭建性能测试环境,执 ...

  3. [原创]Burp Suite web应用程序渗透测试神器

    [原创]Burp Suite web应用程序渗透测试神器 一 Burp Suite介绍 Burp Suite是Web应用程序测试的最佳工具之一,其多种功能可以帮我们执行各种任务.请求的拦截和修改,扫描 ...

  4. Quartz Cron表达式 每周、每月执行一次

    原文:https://blog.csdn.net/qq_33432559/article/details/75633767 系统中通常有些需要自动执行的任务,这些任务可能每隔一段时间就要执行一次,也可 ...

  5. FileUpload1.PostedFile.FileName 获取的文件名

    例如文件叫做 c:\web\a.jpg 如果用IE,则返回   c:\web\a.jpg 含路径 如果用Chrome,则返回 a.jpg 不含路径.

  6. [Canvas]空战游戏 已经可以玩了 1.13Playable

    空战游戏做到这里,己方运动,己方发射子弹,敌方运动,敌方发射子弹,子弹与飞机碰撞,飞机与飞机碰撞都已经具备了,换言之已经可以玩了. 还需要一个奖励升级系统,在上面显示击落敌机数量等,还有己方不幸被击落 ...

  7. PHPStrom激活方法

    直接用浏览器打开 http://idea.lanyus.com/ 点击页面中的“获得注册码”, 然后在注册时切换至Activation Code选项,输入获得的注册码一长串字符串 如果提示红字体信息, ...

  8. 干货!最全羽毛球技术动态分解gif图

    羽毛球的技术千变万化,但是离不开最基本的击球方法.下面通过一组形象的动态图,给你展现羽毛球的基本动作.大家,务必要收藏起来,慢慢体会哦! 一.发球 二.前场技术 1.网前球 2.搓球 3.勾球 4.推 ...

  9. Docker入门 - 004 Docker 容器使用

    Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. docker 可以通过命令 docker command -- ...

  10. simHash 简介以及 java 实现

    传统的 hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法.产生的两个签名,如果相等,说明原始内容在一定概 率 下是相等的:如果不相等,除了说明原始内容不相等外 ...