




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主讲:褚娜主讲:褚娜Objective-C语言语言主要内容基本数据类型基本数据类型1类和对象类和对象2变量与属性变量与属性3类的继承与复合类的继承与复合4类别和协议类别和协议5Objective-C基本数据类型 C的基本数据类型的基本数据类型 布尔类型布尔类型int, float, double, char BOOLYES=1, NO=0一些特别的类型一些特别的类型id,instancetype,class,SEL,IMPnil而不是而不是null OC语言的特点v兼容性:兼容性:Objective-C 可以说是一种面向对象的可以说是一种面向对象的C语言,语言,在在Objective-C 的代
2、码中可以有的代码中可以有C和和C+ 语句语句,它可以调用,它可以调用C的函数,也可以通过的函数,也可以通过C+ 对象访对象访问方法。问方法。 #import int main (int argc, const char * argv) autoreleasePool int integerVar = 100; float floatingVar = 331.79; double doubleVar = 8.44e+11; char charVar = W; NSLog( integerVar = %i, integerVar); NSLog( floatingVar = %f, floatin
3、gVar ); NSLog( doubleVar = %e, doubleVar); NSLog( doubleVar = %g, doubleVar); NSLog( charVar = %c, charVar); return 0; v按照数据类型占用存储不同可以自动类型转换或按照数据类型占用存储不同可以自动类型转换或强制类型转换,总的原则是小存储容量数据类型强制类型转换,总的原则是小存储容量数据类型可以自动转换成为大存储容量数据类型。可以自动转换成为大存储容量数据类型。v?不同类型数据间按照下面关系的从左到右(从低不同类型数据间按照下面关系的从左到右(从低到高)自动转换:到高)自动转换:
4、?_Bool、char、short int、枚举类型、枚举类型 - int -long int-long long int- float - double - long double。 类和对象v 会区分:类和对象会区分:类和对象v 熟练创建类熟练创建类v 熟练创建对象熟练创建对象v 熟练为对象的实例变量赋值熟练为对象的实例变量赋值自学猜猜他们是谁?图中有哪些类什么是类v类是一组具有相同特征和行为的事物的抽象。类是一组具有相同特征和行为的事物的抽象。v类定义了事物的属性和它的行为。类定义了事物的属性和它的行为。v类是抽象的,并不是具体指某一个人,而是泛指类是抽象的,并不是具体指某一个人,而是泛
5、指某一堆人。某一堆人。能力怎样描述类能力OC中的类v在在OC中,中,类类的定义分的定义分两个部分两个部分:接口接口部分和部分和实实现现部分,通常分别写在两个文件中。部分,通常分别写在两个文件中。v接口部分接口部分(.h):声明声明了类名、父类名、实例变了类名、父类名、实例变量(特征)和方法(行为)。量(特征)和方法(行为)。v实现部分实现部分(.m):方法的具体:方法的具体实现实现(具体行为)(具体行为)能力类的接口接口部分以接口部分以interface开始,以开始,以end结束结束interface Person : NSObject NSString *_name; /姓名姓名 NSStr
6、ing *_gender; /性别性别 NSString *_hobby; /爱好爱好 int _age; /年龄年龄-(void)sayHi;end类名类名父类名父类名/ Person.hinterface Person : NSObject /类的成员变量区:在此添加类的成员变量类的成员变量区:在此添加类的成员变量/类的方法与属性区:在此添加类的方法与属性类的方法与属性区:在此添加类的方法与属性end能力!类的实现实现部分以实现部分以implementation开始,以开始,以end结束结束#import “Person.h”implementation Person -(void)say
7、Hi NSLog(“你好,我是你好,我是%,今年,今年%d岁,喜欢岁,喜欢%。”,_name, _age, _hobby);end/ Person.m#import “Person.himplementation Person/类的实现区:在此添加类的实现区:在此添加静态变量、静态变量、属性与方法的实现属性与方法的实现endv #import指令与指令与#include指令都是编译预处理指令。指令都是编译预处理指令。 二者都用于将指定的头文件的内容引入到当前位置。二者都用于将指定的头文件的内容引入到当前位置。 二者区别是二者区别是#import指令保证头文件至多只会被引用一次。指令保证头文件至
8、多只会被引用一次。 使用双引号引用当前项目中的头文件。使用双引号引用当前项目中的头文件。 使用尖括号引用某个框架中的头文件。使用尖括号引用某个框架中的头文件。类的成员变量v 使用编译器指令定义成员变量的访问级别使用编译器指令定义成员变量的访问级别: protected:保护访问级别,:保护访问级别,默认值默认值。成员变量只对当前类及。成员变量只对当前类及其子类的实例方法可见。其子类的实例方法可见。 private:私有访问级别。成员变量只对当前类的实例方法可:私有访问级别。成员变量只对当前类的实例方法可见。见。 public:公有访问级别。成员变量对外可见。:公有访问级别。成员变量对外可见。O
9、C中的对象v类(类型)是一个抽象的概念,开发中真正操作类(类型)是一个抽象的概念,开发中真正操作的是对象(类的实例)。的是对象(类的实例)。v使用对象之前必须先创建对象,分两步:使用对象之前必须先创建对象,分两步: 内存分配:为对象分配内存空间,并返回首地址;内存分配:为对象分配内存空间,并返回首地址; 初始化:在内存中填上初始值。初始化:在内存中填上初始值。分配空间和初始化v Person *p = Person alloc;v 通过调用通过调用alloc方法方法开辟内存空间开辟内存空间,用于存放实例变量,用于存放实例变量,在,在alloc过程中,过程中,这段这段内存会被填充内存会被填充0。
10、具体如下:。具体如下:v p = p init;v 通过调用通过调用init方法为清空的内存重新赋值。方法为清空的内存重新赋值。v 通常我们会把分配空间和初始化连写。通常我们会把分配空间和初始化连写。应用程序#import “Person.h”int main(int argc, const char *argv) autoreleasepool Person *p = Person alloc init; p-age = 20; p-name=“小唐小唐” ; p-hobby=“念经念经”; p sayHi; return 0;在类的对象上调用某个实例方法,也就是向在类的对象上调用某个实例方
11、法,也就是向类的对象发送某条消息。类的对象发送某条消息。/ Person.hinterface Person : NSObject ./问好问好- (void)sayHi;/用于初始化一用于初始化一个具体的人个具体的人- (id)initWithName:(NSString*)newName andAge:(int)newAge andHobby:(NSString *)newHobby;end类的方法v 无参数方法的声明格式:无参数方法的声明格式:+|- (返回值类型返回值类型) 方法名方法名;v 有参数方法的声明格式有参数方法的声明格式 (通过空格分隔多个参数描述部分通过空格分隔多个参数描
12、述部分)+|- (返回值类型返回值类型) 参数参数1说明说明:(参数参数1类型类型)参数参数1名字名字 参数参数2说明说明:(参数参数2类型类型)参数参数2名字名字 .;v 方法声明最后必须以分号结尾。方法声明最后必须以分号结尾。v 请注意请注意Objective-C与其他面向对象编程语言的区别。与其他面向对象编程语言的区别。实例方法实例方法类方法类方法#import “Person.h”implementation Person - (id)initWithName:(NSString*)newName andAge:(int)newAge andHobby:(NSString *)newH
13、obby self = super init; /完成基类部分的初始化完成基类部分的初始化 if(self) /获得字符串对象的副本获得字符串对象的副本 _name = newName copy; _hobby = newHobby copy; _age = newAge; return self;也可写成也可写成if(self=super init)# /用于释放对象占用的内存资源用于释放对象占用的内存资源- (void)dealloc _name release; /释放字符串对象占用的内存释放字符串对象占用的内存 _hobby release; super dealloc;endvdea
14、lloc方法用于在对象销毁时释放该对象占用的资源。方法用于在对象销毁时释放该对象占用的资源。#import “Person.h”int main(int argc, const char *argv) autoreleasepool Person *p = Person alloc initWithName:”小唐小唐” andAge:20 andHobby:”念经念经”; p sayHi; return 0;方法调用v 无参数方法的调用格式:无参数方法的调用格式: 调用目标调用目标 方法名方法名;v 有参数方法有参数方法的调用格式:的调用格式: 调用目标调用目标 方法名方法名:参数参数 方法
15、名方法名:参数参数 .;v 例如,创建例如,创建Person对象并调用其方法:对象并调用其方法: p sayHi; p initWithName:”小唐小唐” andAge:20 andHobby:”念经念经”; v实例方法的访问级别总是实例方法的访问级别总是public。v方法调用允许嵌套。方法调用允许嵌套。v注意调用注意调用Objective-C方法与调用方法与调用C函数在语函数在语法上的区别。法上的区别。vObjective-C存在真正意义上的私有方法吗?存在真正意义上的私有方法吗?这体现了这体现了Objective-C编程语言的什么特性编程语言的什么特性?类的属性v成员变量的默认访问级
16、别为成员变量的默认访问级别为protected,外部无,外部无法直接访问或修改成员变量。法直接访问或修改成员变量。v类的类的属性属性用于访问和修改类的用于访问和修改类的成员变量成员变量: 属性就是成员变量的属性就是成员变量的get与与set方法集。方法集。 没有破坏类的封装性。没有破坏类的封装性。类的属性v属性是面向对象技术中封装性的体现。属性是面向对象技术中封装性的体现。 属性是被属性是被“外部使用外部使用”,成员变量,成员变量(字段字段)是被是被“内部使内部使用用”。 属性并不占用实际的内存,字段占内存位置及空间。属性并不占用实际的内存,字段占内存位置及空间。 属属性可以被其它类访问,而大
17、部分字段不能直接访问。属性可以被其它类访问,而大部分字段不能直接访问。属性可以对接收的数据范围作限定,而字段不能。性可以对接收的数据范围作限定,而字段不能。 当读取属性时,执行当读取属性时,执行 get 访问器的代码块;当向属性分访问器的代码块;当向属性分配一个新值时,执行配一个新值时,执行 set 访问器的代码块。访问器的代码块。类的属性-声明属性v 属性声明的格式:属性声明的格式:property (属性的附加特性属性的附加特性) 属性类型属性类型 属性名称属性名称;v 例如:例如: property (nonatomic, copy) NSString* name; property (
18、nonatomic, assign) int age;类的属性-声明属性v property (nonatomic, copy) NSString* name; property(nonatomic, assign) int age;v 属性属性的的附加特性附加特性可以是可以是nonatomic、readonly、readwrite、getter = get方法名方法名, setter = set方法方法名名、assign、retain或者或者copy。 nonatomic:不不使用互斥锁,使用互斥锁,用于提高效率。用于提高效率。 readonly:只读:只读。 getter = get方法名
19、方法名, setter = set方法名:方法名:指定指定get与与set方法名。方法名。 assign、retain或者或者copy:这三种附加特性涉及到内存管理:这三种附加特性涉及到内存管理。类的属性-声明属性/ Person.hinterface Person : NSOperty (nonatomic, copy) NSString* name;property (nonatomic, assign) int age;endv非原子访问的、复制的、可读写的字符串属性非原子访问的、复制的、可读写的字符串属性name。v非原子访问的、直接赋值的、可读写的整型属性非原子访问
20、的、直接赋值的、可读写的整型属性age。类的属性-实现属性v 使用使用synthesize指令指令实现属性,即实现属性,即按照属性声明的要求按照属性声明的要求,自动生成,自动生成get和和set方法。方法。v 格式:格式:synthesize 属性名称属性名称;synthesize 属性名称属性名称 = 成员变量名成员变量名;v 第一种格式,属性会默认关联到与属性名相同的成员变量第一种格式,属性会默认关联到与属性名相同的成员变量。v 第第二二种格式种格式,属性属性会会关联到等号关联到等号后面的后面的成员变量。成员变量。v 命名规范是在成员变量名之前加下划线(非强制)。命名规范是在成员变量名之前
21、加下划线(非强制)。/ Person.mimplementation Personsynthesize name = _name, age = _age;.endv相当于相当于自动生成以下自动生成以下方法:方法:- (NSString*)name; /成员变量成员变量_name的的get方法方法- (void)setName:(NSString*)newName; /成员变量成员变量_name的的set方法方法- (int)age; /成员变量成员变量_age的的get方法方法- (void)setAge:(int)newAge; /成员变量成员变量_age的的set方法方法类的属性-调用属性
22、v 使用点操作符调用属性使用点操作符调用属性。例如:。例如: /通过通过name属性修改属性修改_name成员变量的值成员变量的值 = “悟空悟空; /通过通过name属性获得属性获得_name成员变量的值成员变量的值NSLog(My name is: %, );v 相当于调用相当于调用get与与set方法。方法。v 点操作符点操作符除了用于调用属性方法之外,还用于访问结构体的成员。除了用于调用属性方法之外,还用于访问结构体的成员。v 当需要修改结构体属性的内部成员变量时,正确的实现方式是什么当需要修改结构体属性的内部成员变量时,正确的实现方式是什么?相当于相当于 p
23、setName:”悟空悟空”;相当于相当于 NSLog(My name is: %, p name);/Person.hstruct Student int score;interface Person : NSObjectproperty (nonatomic, assign) struct Student stuStruct;end/Person.mimplementation Personsynthesize stuStruct = _stuStruct;end结构体结构体/mainPerson * p = Person alloc init;p.stuStruct.score=6;st
24、ruct Student s1 = p.stuStruct;s1.score = 6;p.stuStruct=s1;无法通过修改无法通过修改属性返回的结构体属性返回的结构体来达到修改结构体成员变量来达到修改结构体成员变量的目的的目的建议使用建议使用p stuStruct;相当于相当于 p stuStruct.score=6;与_stuStruct是两个不同的对象类的静态变量与静态方法/Person.hinterface Person : NSObject+(int)getNumberOfStu; /类方法声明类方法声明end/Person.mimplementation PersonStati
25、c int numberOfStu = 0;-(id)initWithName:(NSString *)newName andAge:(int)newAge if(self=super init) +numberOfStu; return self;类的静态变量与静态方法/Person.m+(int) getNumberofStu NSLog(“Here are %d students!”, numberOfStu); return numberOfStu;-(void) dealloc -numberOfStu; /释放对象时,需要对类的静态变量进行自减释放对象时,需要对类的静态变量进行自减
26、 name release; super dealloc;endint n = Person getNumberOfStu;类方法调用,只能被类调用,而不是类方法调用,只能被类调用,而不是对象对象 课堂练习 创建一个简单类创建一个简单类继承与复合v 类是类是对一类事物的抽象描述对一类事物的抽象描述。v 类的类的实例实例/对象是类的一个实体,满足类的特征。对象是类的一个实体,满足类的特征。v 创建类的对象,称为类的实例化。创建类的对象,称为类的实例化。v 类之间允许具有包含关系,类之间允许具有包含关系,表达表达“是一个是一个”的关系。的关系。v 类之间还允许具有组合(复合)关系类之间还允许具有组
27、合(复合)关系 ,表达,表达“有一个有一个”的关系。的关系。v 在在程序的设计与实现阶段程序的设计与实现阶段需要定义不同的类,并创建它需要定义不同的类,并创建它们的实例(对象),完成各种任务。们的实例(对象),完成各种任务。继承继承组合组合继承与复合v在类的接口部分中声明继承关系,即在子类的类在类的接口部分中声明继承关系,即在子类的类名后附加冒号,然后给出基类名称。名后附加冒号,然后给出基类名称。/ Person.hinterface Person : NSObjectv子类继承基类定义的所有方法与成员变量。子类继承基类定义的所有方法与成员变量。v不支持多继承。不支持多继承。继承与复合v通过继
28、承,子类可以直接通过继承,子类可以直接重用重用基类的代码(包括基类的代码(包括基类的所有成员变量和方法),获得基类的所有基类的所有成员变量和方法),获得基类的所有特性,反映出特性,反映出“子类是基类子类是基类”的概念。的概念。v 除继承之外,类除继承之外,类之间之间还允许进行复合,即类的成员变量指向还允许进行复合,即类的成员变量指向另一个类的对象,反映出另一个类的对象,反映出“类有另一个类类有另一个类”的概念。的概念。 / Bike.hclass Wheel;interface Bike : NSObject Wheel* _frontWheel, * _rearWheel;v class指令
29、用于类的前向声明。指令用于类的前向声明。 避免编译依赖,节约编译时间。避免编译依赖,节约编译时间。 解决循环引用解决循环引用。“鸡生蛋,蛋生鸡鸡生蛋,蛋生鸡”。#import与class的区别v #import方式会包含被引用类方式会包含被引用类的所有信息,包括被引用类的变的所有信息,包括被引用类的变量和方法;量和方法;v class方式只是告诉编译器在方式只是告诉编译器在A.h文件中文件中 B *b 只是类的声明只是类的声明,具体这个类里有什么信息,这,具体这个类里有什么信息,这里不需要知道,等实现文件中真里不需要知道,等实现文件中真正要用到时,才会真正去查看正要用到时,才会真正去查看B类中
30、信息;类中信息;/A.h#import B.hinterface A : NSObject B *b;end#import与class的区别v #import方式会包含被引用类方式会包含被引用类的所有信息,包括被引用类的变的所有信息,包括被引用类的变量和方法;量和方法;v class方式只是告诉编译器在方式只是告诉编译器在A.h文件中文件中 B *b 只是类的声明只是类的声明,具体这个类里有什么信息,这,具体这个类里有什么信息,这里不需要知道,等实现文件中真里不需要知道,等实现文件中真正要用到时,才会真正去查看正要用到时,才会真正去查看B类中信息;类中信息;/A.h#import B.hint
31、erface A : NSObject B *b;end#import与class的区别/A.h#import B.hinterface A : NSObject end在编译效率上在编译效率上 #improt(A-B, B-C,C-D)一旦最开始的头文件稍有改动,后面引用到这个文件的所有一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,这样的效率也是可想而知的。类都需要重新编译一遍,这样的效率也是可想而知的。使用使用class方式不会出现这种问题。方式不会出现这种问题。/B.h#import “C.hinterface B : NSObject end/C.h#imp
32、ort “D.hinterface C : NSObject end#import与class的区别/A.h#import B.hinterface A : NSObject end当程序运行时,编译会报错当程序运行时,编译会报错当使用当使用class在两个类相互声明,就不会出现编译报错。在两个类相互声明,就不会出现编译报错。/B.h#import “A.hinterface B : NSObject endclass Bclass A扩展类的定义v Objective-C中提供了可以让你扩展类的定义的手段:中提供了可以让你扩展类的定义的手段: 类别(类别(Category):为已知的类增加新
33、的方法):为已知的类增加新的方法 延展(延展(Extension):通过在本类的定义里使用类目来声):通过在本类的定义里使用类目来声 明私有方法明私有方法 协议(协议(Protocol):声明一些方法,但是让别的类来实现):声明一些方法,但是让别的类来实现v 注意:这些手段只能增加类的方法,并不能用于增加实例注意:这些手段只能增加类的方法,并不能用于增加实例变量。变量。v 要增加类的实例变量,只能通过定义子类来间接实现。要增加类的实例变量,只能通过定义子类来间接实现。类别(Category)v 类别类别的的两个两个主要主要作用作用: 在不使用继承的情况下向类添加新的方法以扩展类的功能在不使用继
34、承的情况下向类添加新的方法以扩展类的功能。 使用类别,你还可以将你自己的类的定义分开放在不同的源文使用类别,你还可以将你自己的类的定义分开放在不同的源文件里。件里。定义类别v 通过类目加入的方法会成为原始类的一部分。例如:通过类目加入的方法会成为原始类的一部分。例如: 通过类目向通过类目向NSString增加方法,编译器会把这些方法加到增加方法,编译器会把这些方法加到NSString的定义里;的定义里; 通过给通过给NSString定义子类来增加方法,则定义子类来增加方法,则NSString类的定义里便类的定义里便不会包含这些方法不会包含这些方法 类别里定义的方法可以干任何原始类中方法能干的事
35、,在运行时,它类别里定义的方法可以干任何原始类中方法能干的事,在运行时,它们是平等对待的们是平等对待的 类别里定义的方法也会被原始类的子类所继承,就跟原始类的其它方类别里定义的方法也会被原始类的子类所继承,就跟原始类的其它方法一样。法一样。定义类别v声明类别的接口声明类别的接口 类目的接口声明与类的接口很相似类目的接口声明与类的接口很相似除了带有括号中除了带有括号中的类目名和没有父类名以外的类目名和没有父类名以外#import interface NSString (StringVowels)- (NSUInteger)vowelCount;end定义类别v类别声明与实现格式:类别声明与实现格
36、式:#import 目标类名目标类名.hinterface 目标类名目标类名 (类别名称类别名称)/方法声明区方法声明区endimplementation 目标类名目标类名 (类别名称类别名称)/方法实现区方法实现区endv 用小括号标出类别的名称。用小括号标出类别的名称。v 类别附加的方法类别附加的方法也能够访问类的成员变量,或是继承到子类中。也能够访问类的成员变量,或是继承到子类中。类别的实现v类别的实现定义中一般要包含它的接口文件类别的实现定义中一般要包含它的接口文件v类别的接口文件一般用类别的接口文件一般用“类名类目名类名类目名.h”来命名来命名#import NSString+Str
37、ingVowels.h#import NSString+StringVowels.himplementation NSString (StringVowels)implementation NSString (StringVowels)- (NSUInteger)vowelCount- (NSUInteger)vowelCount / /具体的代码实现,处于演示目的就不实现了具体的代码实现,处于演示目的就不实现了 return 0; return 0; endend你可以为一个类增加任意多个类目,但它们的类你可以为一个类增加任意多个类目,但它们的类目名必须不相同,它们包含的方法名也必须不相目名
38、必须不相同,它们包含的方法名也必须不相同。同。类别的用处v扩展别人实现的类扩展别人实现的类。v可以扩展可以扩展Cocoa框架中的类,在类别中增加的方框架中的类,在类别中增加的方法会被子类所继承,而且在运行时跟其它的方法法会被子类所继承,而且在运行时跟其它的方法没有什么两样。没有什么两样。类别的用处v作为子类的替代手段作为子类的替代手段v不需要定义和使用一个子类,你可以通过类别直不需要定义和使用一个子类,你可以通过类别直接向已有的类里增加方法接向已有的类里增加方法v跟定义子类一样,不需要所继承的类的源代码跟定义子类一样,不需要所继承的类的源代码类别的用处v把类的实现代码分布在不同的文件中把类的实
39、现代码分布在不同的文件中v 你可以把一个较大的类的方法成组地写到各个类目里,每你可以把一个较大的类的方法成组地写到各个类目里,每一个类别使用单独的文件一个类别使用单独的文件v 这样一来就能为开发过程提供以下好处:这样一来就能为开发过程提供以下好处: 一种简单的,给功能相近的方法分组的方式一种简单的,给功能相近的方法分组的方式 易于多人合作开发同一个类易于多人合作开发同一个类 便于常用方法的移植便于常用方法的移植 使得你可以为不同的程序设置同一个类的不同配置,而不用维护很多版本使得你可以为不同的程序设置同一个类的不同配置,而不用维护很多版本的源代码的源代码v将类的实现分成若干部分。将类的实现分成
40、若干部分。/ NSArray.hinterface NSMutableArray : NSArray. /NSMutableArray本体定义本体定义endinterface NSMutableArray (NSExtendedMutableArray). /类别类别NSExtendedMutableArrayendinterface NSMutableArray (NSMutableArrayCreation). /类别类别NSMutableArrayCreationend类别的错误用法v尽管语法上支持,但是尽管语法上支持,但是不要在类目中复写已经存不要在类目中复写已经存在的方法,也不要复写
41、其它类目中定义的方法在的方法,也不要复写其它类目中定义的方法v这样可能会导致:这样可能会导致: 向向super传递的消息链断开传递的消息链断开 影响所有使用了该方法的代码的行为影响所有使用了该方法的代码的行为 尤其复写框架中的方法,是非常危险的尤其复写框架中的方法,是非常危险的延展(Extension)v类的延展就像类的延展就像“匿名匿名”的类目,延展中定义的方的类目,延展中定义的方法法在类本身的在类本身的implementation代码区域中代码区域中进行实现进行实现v类有时需要一些只为自己所见、所用的私有方法类有时需要一些只为自己所见、所用的私有方法v这种私有方法可以通过延展的方式来声明这
42、种私有方法可以通过延展的方式来声明v在延展中声明的方法可以没有实现,编译器不会在延展中声明的方法可以没有实现,编译器不会警报警报定义延展/Person.hinterface Person :NSObject NSInteger _salary;- ( NSInteger)salary;end/Person.minterface Person (setter)- (void)setSalary:(NSInteger)newSalary;endimplementation Person- (NSInteger)salary return _salary;end定义延展v当在定义延展的时候不提供类别
43、名时,延展中定当在定义延展的时候不提供类别名时,延展中定义的方法既被视为义的方法既被视为“必须实现必须实现”的的APIv在这种情况下,如果方法缺少实现代码,则编译在这种情况下,如果方法缺少实现代码,则编译器会报错器会报错v方法的实现必须出现在类主体的方法的实现必须出现在类主体的implementation代码块中代码块中/Person.minterface Person ( )- (void)setSalary:(NSInteger)newSalary;endimplementation Person- (void)setSalary:(NSInteger)newSalary _salary = newSalary;end协议(Pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村合作种植合同范本
- 公司食堂阿姨劳务合同范本
- 保编合同范本
- 分包合同范本汇编
- 公司安全培训合同范本
- 中介工作合同正式合同范本
- 减速机模具合同范本
- 2025内蒙古建安发展投资集团有限公司招聘14人笔试参考题库附带答案详解
- 公摊电梯合同范例
- bot模式合作合同范本
- 八年级班主任学生心理健康计划
- 整体施工劳务服务方案
- 传统节日端午节模板37
- 2024 贵州公务员考试行测真题(省直)
- 2025年泰山职业技术学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 人体解剖学肱骨讲解
- 2025春季开学第一次全体教师会上校长讲话稿
- 2025年三方买卖协议标准版本(2篇)
- 2025年南京旅游职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 《小脑梗死护理查房》课件
- 江西专业红娘培训课件
评论
0/150
提交评论