1、什么是属性?属性会帮我们做哪些事情?请详细说明。

  (1)①属性是Objective-C 2.0定义的语法,为实例变量提供了setter、getter方法的默认实现;②能在一定程度上简化程序代码,并且增强实例变量的访问安全性。

  (2)①属性会对于你声明的实例变量,它会默认帮你补齐你所需要的(你没有声明的,或者你没有实现的)getter,setter方法;②如果你不满意系统默认生成的getter,setter方法 需要同时重写一个实例变量的getter,setter方法,这时就需要注明 @synthesize  然后用实例变量去赋值属性名 // name = _name 不要写反。

2、什么是Attribute?属性的Attribute有几大类?都有什么作用?

  (1)Objective-C提供属性的目的是为了简化程序员编码,并且为属性提供了一些关键字用以控制setter、getter的实现细节,这些关键字我们称为属性的属性(Attribute);

  (2)一共3大类Attribute;

  (3)第一类:读写性控制(readonly、readwrite、setter、getter)

      ①readonly,告诉编译器,只声明getter方法(无setter方法)。

      例如:@property(readonly)NSString *name;  //等价于:- (NSString *)name;

      ②readwrite,告诉编译器,既声明setter又声明getter。

      例如: @property(readwrite)NSString *name;  //等价于:- (void)setName:(NSString *)name;  - (NSString *)name;

      ③readwrite是读写性控制的默认设置。

    第二类:原子性控制(nonatomic、atomic)

      ①atomic:setter、getter方法在多线程访问下是绝对安全的,即 setter、getter内部做了多线程访问处理(原子性控制的默认设置是 atomic);

      ②nonatomic:setter、getter方法内部不会做多线程访问处理,仅仅是普通的setter、getter方法;

    注意:①程序开发过程中,setter、getter处处都在用,如果使用atomic,需要不断的对setter、getter加锁解锁以保证线程访问安全,会很占用系统资源,降低系统性能;

       ②通常设置为nonatomic,某些属性需要线程安全的时候,才定义为atomic。

       例如:例如:@property (readwrite,nonatomic)NSString *name;  //等价于:- (void)setName:(NSString *)name;  - (NSString *)name;

    第三类:语义设置(assign、retain、copy)

      ①assign。setter、getter内部实现是直接赋值。

      示例:例如:@property(nonatomic,assign)int age;

      

      ②retain。setter、getter的内部实现会做内存优化。

      示例:例如:@property(nonatomic,retain)NSString *name;

      

      ③copy。setter、getter的内部实现也会做内存优化。

      示例:例如:@property(nonatomic,copy)NSString *name;

      

    提示:①如果属性是非对象类型(比如int,float等)属性的语义设置使用assign;

       ②如果属性是对象类型(比如NSStrng、NSArray等)属性的语义设置使用retain;

       ③如果属性是对象类型并且想得到参数的copy,使用copy关键字。

3、要想使用点语法必须要满足什么条件?

  凡是符合系统默认setter、getter书写格式的方法都可以使用点语法。

  例如:[person setName:@"zhangsan"];  可以等价写成   person.name = @"zhangsan";

     NSString *name = [person1 name];  可以等价写成  NSString *name = person1.name;

4、使用点语法的实质就是在调用setter,getter方法.那什么时候是在调用setter方法,什么时候是在调用getter方法呢?

  有赋值操作就是在调用setter方法,   没有赋值只是当做一个值使用的时候就是调用getter方法。

5、KVC的全称是什么?

  KVC全称:(Key-Value-Coding),键值编码,是一种间接访问实例变量的方法。 key:键,用于标识实例变量;vlaue:实例变量对应的值。

6、在KVC中,给对象的一个实例变量赋值,用什么方法?

  ①普通键值:setValue:forKey:

  ②有层级关系的赋值:比如:学生的老师的女朋友 [stu tea.gf]   就用:setValue:forKeyPath:

7、在KVC中,如果在赋值或取值过程中,key所对应的实例变量不存在,执行的结果是什么?如何避免?

  当key不存在 防止崩溃 就在对应的类.m文件中重写setter方法就用 setValue:forUndefinedKey:

  示例:

  

8、在KVC中给一个对象的实例变量批量赋值采用什么方法?

  批量赋值 把键值对存放在字典里 然后直接赋值字典 就用 setValuesForKeysWithDictionary:

Email:dingding3w@126.com

Objective-C 快速入门--基础(五)的更多相关文章

  1. Objective C 快速入门学习五

    <一>继承和多态 @class Complex 声明类(同C++) 子类函数成员 super 访问父类 同C++类似 .通过继承 在子类中添加新方法 .通过继承 在子类中添加新成员 .通过 ...

  2. Scala快速入门 - 基础语法篇

    本篇文章首发于头条号Scala快速入门 - 基础语法篇,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的 ...

  3. ELK快速入门(五)配置nginx代理kibana

    ELK快速入门五-配置nginx代理kibana 由于kibana界面默认没有安全认证界面,为了保证安全,通过nginx进行代理并设置访问认证. 配置kibana [root@linux-elk1 ~ ...

  4. [SQL]SQL语言入门级教材_SQL语言快速入门(五)

    SQL语言快速入门(一) SQL是英文Structured Query Language的缩写,意思为结构化查询语言. SQL语言的主要功能就是同各种数据库建立联系,进行沟通.按照ANSI(美国国家标 ...

  5. CSS快速入门基础篇,让你快速上手(附带代码案例)

    1.什么是CSS 学习思路 CSS是什么 怎么去用CSS(快速上手) CSS选择器(难点也是重点) 网页美化(文字,阴影,超链接,列表,渐变等) 盒子模型 浮动 定位 网页动画(特效效果) 项目格式: ...

  6. Objective-C 快速入门--基础(二)

    1.什么是继承?OC中的继承有哪些特点? “继承”是面向对象软件技术当中的一个概念.如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类&quo ...

  7. Objective C 快速入门学习一

    Objective-C程序设计 1. 直接用Xcode作为IDE,舍弃gcc编译方面的学习.2. 入门例子:Eg:打印Hello World 控制台程序 #import<Foundation/F ...

  8. 笔记65 Spring Boot快速入门(五)

    SpringBoot+JPA 一.什么是JPA? JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期 ...

  9. Objective C 快速入门学习三

    1.数据类型 和C语言基本一样. 有一个特别数据类型id,可以储存任何类型的对象,它是实现多态和动态绑定的基础. Objective-C 2.程序结构 Objective-C和C的程序结构一模一样,具 ...

随机推荐

  1. Inno Steup 打包加入文件夹

    在[Files]段下,添加下面代码Source: "执行文件.exe"; DestDir: "{app}"; Flags: igNoreversionSourc ...

  2. 有意思的Console

    在很久的以前,因为经常在浏览器控制台调试修改数据,想到用户如果使用控制台配合抓包工具修改上下行流量中的数据,会给站点带来不定的安全威胁,所以一直想找个方法,准确的说是js的方法“禁用”控制台,也就是用 ...

  3. 如何让ASP.NET Web API的Action方法在希望的Culture下执行

    在今天编辑推荐的<Hello Web API系列教程--Web API与国际化>一文中,作者通过自定义的HttpMessageHandler的方式根据请求的Accep-Language报头 ...

  4. IOS开发之视图和视图控制器

    视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一 ...

  5. 构建自己的PHP框架--构建缓存组件(2)

    上一篇博客中使用文件实现了缓存组件,这一篇我们就使用Redis来实现一下,剩下的如何使用memcache.mysql等去实现缓存我就不一一去做了. 首先我们需要安装一下 redis 和 phpredi ...

  6. 项目总结---- imageLoder 的2个Bug解决方法、1.9.4如何选择性删除disk缓存和其它一些错误。

    我们不说废话,直接入主题,抓紧时间写完,好继续找bug... (PS:imageLoder的bug 百度不到的哦,不过我坚信我的观点没错) 版本1.9.2,1.9.4我没测试 1,imageLoder ...

  7. C++指针和动态内存分配

    指针和动态内存分配 数组与指针 数组 数组名是一个指针常量. 数组名传递数据时,传递的是地址. 数组作为函数参数时不指定第一维大小. 对象数组 A a[2] = {A(1,2)}; 执行时先调用有参数 ...

  8. 相克军_Oracle体系_随堂笔记016-参数文件及数据库的启动和关闭

    参数文件: spfile<SID>.ora    动态参数文件,是二进制文件,9i以后引入并建议使用 init<SID>.ora    静态参数文件,是文本文件 动态参数,部分 ...

  9. WebApi Controller 分类

    前言 写这篇WebApi Controller分类一是把Contrller分类的解决方法说一说,再顺便把遇到的问题和解决方法聊一聊. 说实话第一次在项目中使用WebApi感觉非常的不顺手. 遇到的问题 ...

  10. OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)

    在OpenCV2:图像的几何变换,平移.镜像.缩放.旋转(1)主要介绍了图像变换中的向前映射.向后映射.处理变换过程中浮点坐标像素值的插值算法,并且基于OpenCV2实现了两个简单的几何变换:平移和镜 ...