Objective-C类和对象总结

Objective-C类和对象总结:

头文件.h文件:(header file)

类的声明:@interface 类名字 : 父类的名称

类名的约定:1、首字母大写,比如Person

父类:通常是NSObject,我们也可以自己指定父类。

类的声明是@end作为结束符。

源文件.m文件(source file):放属性、方法的具体实现。

实现的结构:

#import “xxx.h”//导入类声明的头文件

@implementation 类名称

…….属性和方法的具体实现...........

@end//以@end作为结束符

成员变量:

一个实体所具有的特征

声明:

成员变量必须包括在大括号重

@interface 类名:父类名称

{

//在这个大括号里面,声明成员变量

}

@private、@protected 、@public用于控制成员变量的可访问性(访问权限)

@private 私有成员==》只允许当前类访问

@protected 受保护的成员==》允许当前类和子类进行访问。

默认就是protected(声明成员变量的时候,不指定默认就是@protected)

@public 公共成员====》所有的类都能够访问。

成员变量的约定:

Objc里面,所有的对象类型的变量都必须使用指针,也就是除了基本的数据类型(int,char,float,double,BOOL)之外的变量,都需要使用指针。

比如:一个类的实体,结构体,数组。

在ObjC中不管是自定义的类还是系统类对象都必须是一个指针

定义好了一个类之后,我们进行实例化的时候,有两个步骤:

1)、分配内存===》alloc

2)、对实体进行初始化===》init

推荐实例化的写法:

类名称 *变量名=[[类名称 alloc] init];

方法分类:

1)静态方法 用+定义

2)动态方法 用-定义

定义方法的格式:

无参数:

+/- (返回值类型) 方法名称;

有一个参数的时候,参数前面需要冒号:

+/-  (返回值类型) 方法名称 : (参数的类型)参数名称;

如果有多个参数,我们在第二个参数以后的参数之前,加一个参数说明,方便我们调用的时候,快速的了解方法里面参数的含义

+/- (返回值类型) 方法名称:(参数的类型)参数名称 第二个参数的说明:(第二个参数的类型)第二个参数的名称..........

如果没有在.h中声明,而是直接在.m中定义则该方法是私有方法,外部无法访问。私有方法只允许在当前源文件中调用。其它的类无法访问。

调用静态方法和动态方法的区别:

静态方法:只允许使用类名称进行调用

动态方法:只允许在类里面(在类的源文件中直接调用)或者是通过实例化的对象去调用

属性:通常都是通过对应的setter或者是getter方法进行实现的。

约定:setter方法通常是在属性名称前加一个set,getter方法通常是直接使用属性名称(不加get)

Objc的点语法:

指针变量名称.属性名称

点语法具体到是调用setter方法还是调用getter方法,取决于当前的操作是赋值还是读取

赋值(=)的时候就是调用setter方法,读取的时候调用getter方法。

@property和@synthesize关键字:

我们定义属性的代码基本是一致的,我们使用@property和@synthesize自动生成getter、setter方法。

  • 如果只声明一个属性a,不使用@synthesize实现:编译器会使用_a作为属性的成员变量(如果没有定义成员变量_a则会自动生成一个私有privated的成员变量_a;如果已经定义了成员变量_a则使用自定义的成员变量_a。注意:如果此时定义的成员变量不是_a而是a则此时会自动生成一个成员变量_a,它跟自定义成员变量a没有任何关系);
  • 如果声明了一个属性a,使用@synthesize a进行实现,但是实现过程中没有指定使用的成员变量(例如上面birthday):则此时编译器会使用a作为属性的成员变量(如果定义了成员变量a,则使用自定义成员变量;如果此时没有定义则会自动生成一个私有的成员变量a,注意如果此时定义的是_a则它跟生成的a成员变量没有任何关系);
  • 如果声明了一个属性a,使用@synthesize a=_a进行实现,这个过程已经指定了使用的成员变量:此时会使用指定的成员变量作为属性变量;

self关键字:不仅可以表示当前对象还可以表示类本身

self可以调用动态方法和静态方法

self的实质:指针===》这个指针是指向当前的调用者。

self就代表当前方法的调用者

构造方法:

默认的构造方法是init,继承自NSObject这个类。

我们可以使用自己的构造方法(传参数等)

id类型:

id类型可以代表所有的类型(自己定义的类或者系统定义的类),大多数情况下,也是一个指针。

id类型在运行的时候,才能确定具体的类型。

运用id的地方:通常是返回一个类的实例化的对象(指针)的时候

super关键字:代表父类。

使用super关键字的时候,是直接调用父类的方法的。

即便是子类重写了相同的方法,super调用的,也是父类的方法。

description方法:

定义在NSObject

我们使用%@输出的时候,就会调用description方法。(使用%@的地方不限于NSLog)

重写description方法,通常是按照一定的格式,答应类的成员变量或者属性。

重写的description,严格禁止直接打印self(引起死循环)

默认情况下如果我们不重写description方法,输出内容是类名和地址,例如Person则输出“<Person: 0x100202310>”。

继承:

继承是可以递归的:比如B继承自C,A也可以继承自B  A===>B====>C

Objc不允许多继承:也就是我们声明类的时候,不允许在冒号后写多个类的名字,因为Objc只能允许单集成。

子类:可以直接访问父类成员变量(private的不允许),属性

子类可以调用父类的公开的方法

子类也可以复写父类的公开的方法。

子类和父类的成员变量:

子类和父类成员变量是独立的,子类的实体修改了成员变量的值,不会父类,父类修改了成员变量的值,也不会影响子类。子类和父类,即便是成员变量有继承关系,但是他们都是独立的。

类调用方法:

首先,在当前类,查找被调用的方法,如果当前类,实现了被调用的方法,就会直接调用当前类的方法。

如果当前类,没有实现被调用的方法,程序会自动向上查找直接父类,如果在父类里面定义了被调用的方法,就会调用父类的方法,。

如果父类还找不到被调用的方法,程序会再次向上查找,一直查到NSObject。

最终如果查找到NSObject(Objc的基类),都没有找到方法的定义,这个时候编译器会报错。

使用super关键字,调用的是这个类的直接父类中的方法。如果父类中找不到被调用的方法,程序向上级的父类进行查找,一直到NSObject为止。

宏定义:

#define 宏定义名称 字符串(不需要使用@“”包住)

作用:用到宏定义的地方,编译器会自动的把宏定义名称右边的字符串整个的复制。

BOOL类型:值有两个YES和NO,实质上BOOL是一个unsigned char,YES的值是1,NO的值为0.

oc里面,进行逻辑比较的时候(if语句等)同样遵守C语言的规范:

非0值为真,0值为假。

SEL变量:

SEL:是方法的唯一ID。同名的方法ID相同。

我们可以通过如下几种方式取得SEL变量的值:

1、@selector(方法名)

2、NSSelectorFromString(@“方法名”)

通过SEL变量调用方法的格式:

[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];

函数指针:

指向函数的指针变量。

定义函数指针,有两种方式。

1、跟C语言函数指针类似

2、使用IMP,使用IMP定义函数指针的时候,需要将xcode的编译参数:enable strict Checking of objc_msgSend Calls设置为NO,调用的时候才能正确编译。

Class类型:

通过一个普通的字符串取得一个类的定义。

Class类型的变量取得了类的定义之后,就可以认为,我们这个Class变量是一个已知的类。

就可以实例化对象、进行方法调用等操作。

1     Class 变量名 = [类或者对象 class];
2     Class 变量名 = [类或者对象 superclass];
3     Class 变量名 = NSClassFromString(方法名字的字符串);

特殊方法:

[对象 className]:返回的是对象的类名称

[对象 respondsToSelector : SEL变量名]:判断对象是否具有SEL变量所指向的函数。如果没有SEL变量所指向的这个函数,返回值为NO

时间: 2024-10-29 02:47:17

Objective-C类和对象总结的相关文章

objective - c 类和对象

知识点 1.初步认识 OC 2.xcode使用 3.面向对象编程思想,类和对象 4.类的定义和使用 5.类的实例化--对象 6.声明和实现相分离 =========================================== 1.需要理解的(理论部分) 第一部分:OC和面向对象 1.1.OC语言的历史,特点.重要程度 [什么是OC] objective - c   在C语言基础上开发, 面向对象的语言: 注意C语言和oc语言语法的区别: IOS, iphone, ipad … [进入OC

iOS Objective -C Runtime 运行时之一: 类与对象

// --------------------------------------------------- 参考:南峰子的技术博客 http://southpeak.github.io //---------------------------------------------------- OC语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们编写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等.

iOS修炼之道:objective-c 类、对象和方法 1

1.类,对象和方法的概念 类是对象的独特表现,每个对象包含各自的私有信息,方法是改变和提供访问的这些数据的手段. 因此,objective-c 采用特定的语法对类和实例应用方法: [classOrInstance method]; 或者理解为消息的传递和接受 [receiver message]; 实例如下: 1 myCar = [[Car new] init]; 2 [myCar dive]; 详细描述关于一个处理分数Objective-c类 代码如下: 1 // 2 // main.m 3

《黑马程序员》类和对象(Objective - c)

一.类和对象的概念 OC中有两个很关键的概念就是类和对象,类和对象的关系就如同模具和用这个模具制作出的物品之间的关系.一个类为它的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系. 创建对象:创建对象需要现有类,对象需表述清楚应该具备的属性和功能(行为)  格式[行为执行者  行为名称] 创建类: 需关心三项条件: 事物名称(类名):人(Person) 属性:身高(height).年龄(age)等 行为(功能):跑(run).吃(ea

Objective -C Object initialization 对象初始化

Objective -C Object initialization 对象初始化 1.1 Allocating Objects  分配对象 Allocation is the process by which a new object is born. allocation 是新对象诞生的过程. Sending the alloc message to a class causes that class to allocate a chunk of memory large enough to

Oc(类和对象)(ClassAndObjict)

main函数 // //  main.m //  2-2 LessonClassAndObject // //  Created by lanouhn on 15/2/2. //  Copyright (c) 2015年 lanouhn. All rights reserved. // //import引用系统的头文件用 <>, 引用自定义类的头文件用 "" #import <Foundation/Foundation.h> #import "Car.

iOS RunTime运行时(1):类与对象

Objective-C语言是一门动态语言,他将很多静态语言在编译和链接期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码更具有灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一下方法的实现等. 这种特性意味着OC不仅需要一个编译器,还需要一个运行时系统来执行编译的代码.对于OC来说,这个运行时系统就像一个操作系统一样:他让所有的工作可以正常的运行,这个运行时系统就是Objc RunTime.objc RunTime 其实是一个RunTime库,他基本上是用C语言和汇编写的.

黑马程序员— OC基本语法、类和对象、三大特性

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲     OC简介及基本语法 Objective-C简称OC是在C语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,也就是可以在OC代码中混入C语言代码,甚至是C++代码.可以使用OC开发Mac OS X平台和IOS平台的应用程序.简单的介绍了一下OC,下面我们来看看OC的基本语法,学习OC之前我们先学习了C语言,因为OC是在C语言的基础上的一门开发语言,因此OC的很多基本语法

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

类与对象

1.1 类和对象的关系   为什么要采用面向对象思想进行程序设计与开发 1.可以实现代码的复用 2.符合人思考的方式   类和对象的定义 1.类的定义:用class关键修饰的叫做类 2.对象的定义:类名定义的数据类型   类和对象之间关系 1.由对象归纳为类,是归纳对象共性的过程 2.在类的基础上,将状态和行为实体化为对象的过程为实例化   1.2 定义类   定义类的语法,类主要由成员变量和成员方法构成(暂不提构造函数) eg: publicclassStudent { //成员变量 intn