Objective-C 快速入门--基础(五)

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:[email protected]

时间: 2024-08-11 03:25:45

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

Objective C 快速入门学习五

<一>继承和多态 @class Complex 声明类(同C++) 子类函数成员 super 访问父类 同C++类似 1.通过继承 在子类中添加新方法 2.通过继承 在子类中添加新成员 3.通过继承 实现多态(实现比较简单,通过Id通用类型作为父类) 4.重载 5.抽象类abstract作用:创建子类更容易:提供了处理所有派生子类的公共接口:抽象方法制定了标准协议,规范子类必须实现. 6.通用类型id,编译时不会做类型检查,在运行时才会动态绑定具体类型,指出错误. 静态类型在编译阶段就会指出错

Objective C 快速入门学习三

1.数据类型 和C语言基本一样. 有一个特别数据类型id,可以储存任何类型的对象,它是实现多态和动态绑定的基础. Objective-C 2.程序结构 Objective-C和C的程序结构一模一样,具体用法相同. 顺序.循环.选择 3.基本上Objective-C兼容了C语言所有特点,包括数组.结构.字符串.联合,它们不是对象,面向过程式.建议直接使用相关框架下的相关类,面对对象编程. Objective C 快速入门学习三

Objective C 快速入门学习一

Objective-C程序设计 1. 直接用Xcode作为IDE,舍弃gcc编译方面的学习.2. 入门例子:Eg:打印Hello World 控制台程序 #import<Foundation/Foundation.h> //导入Foundation.h头文件.//头文件后缀.h,源文件后缀.m,Objective-C++后缀.mm. int main(int argc, const char* argv[])//主函数(和C/C++相同, // 和/* 内容 */表示注释符号){      N

区块链快速入门(五)——区块链技术的演化

区块链快速入门(五)--区块链技术的演化 一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵活的合约功能,执行更为复杂的操作.引入智能合约的区块链,已经超越了单纯数据记录功能:可以为区块链加入权限管理,高级编程语言支持等,实现更强大的.支持更多商用场景的分布式账本系统.区块链技术的三种典型演化场景如下: 二.区块链技术的分类 根据参与者的不同,区块

C语言快速入门系列(五)

C语言快速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的 重点,C语言的灵魂-----指针进行学习!使用指针的好处:利用指针可以表示与使用复杂的数据结构; 更加方便地使用我们的数组与字符串;可以像汇编语言一样直接处理内存单元地址;可以动态地进行内存空间 分配,C语言指针是重点,同

Objective C 快速入门学习二

Objective-C 类.对象.方法 1.编写一个复数类: #import <Foundation/Foundation.h>@interface Complex: NSObject //类声明,Complex继承NSObject { int iReal;//成员变量声明,在括号内 int iImag; } //成员函数声明,在括号外 -(void) print; -(void) setReal : (int) n; -(void)setImag : (int) d; @end //@int

Objective C 快速入门学习四

类 1.合成存取器方法 @property   成员变量 @synthesize 成员变量 可以让编译器自动合成 设置和获取函数的方法,不用手动生成set成员变量,Get成员变量 @interface Complex : NSObject { int iReal,iImag; } @property  int iReal, iImag;  //合成存取器方法,第一部:@property标识属性 -(void)print; @end @implementation Complex @synthes

Python3快速入门(五)——Python3函数

Python3快速入门(五)--Python3函数 一.函数定义 1.函数定义 Python 定义函数使用 def 关键字,一般格式如下: def function_name(parameter_list): pass 默认情况下,参数值和参数名称按函数声明中定义的顺序进行匹配.函数代码块以?def?关键词开头,后接函数标识符名称和圆括号?().任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数.函数的第一行语句可以选择性地使用文档字符串描述函数说明.函数内容以冒号起始,并且进行

程序员带你学习安卓开发,十天快速入门-基础知识(四)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 本系列课程是.Net程序员学习安卓开发系列课程. 下面是前三次课程列表: 程序员带你学习安卓开发,十天快速入门-安卓学习必要性 程序员带你学习安卓开发,十天快速入门-开发工具配置学习 程序员带你学习安卓开发,十天快速入-对比C#学习java语法 为了大家系统有效的快速入门安卓开发,推荐