OC基础4:类和方法

1、类的声明(@interface)要放在以它自己名字命名的class.h文件中,而类的定义(@implementation)要放在相同名字的class.m文件中;

2、import本地文件和import系统文件的格式是不同的:导入本地文件要用双引号,导入系统文件要用< 和> ;如下:

#import <Foundation/Foundation.h>

#import “calss.h”

3、程序主要分三个部分:class.h、class.m和main.m,其中:导入系统文件在class.h部分,class.m和main.m只需导入class.h;

4、关于@property指令和@synthesize指令:

(1)、可以只用@property指令而不用@synthesize指令,如果不用@synthesize指令的话,@property指令声明的那些实例变量会被自动命名为以“_”开头,最好还是两个都用上;

(2)、@property指令在interface部分,@synthesize指令在implementation部分;

(3)、@property指令后面的数据类型不需要括号,如下:

@property int num;

(4)、@synthesize指令后不需要跟数据类型,同时有了@synthesize指令后,implementation部分不需要再使用花括号定义这些变量;

(5)、在interface部分用@property指令声明内容如下:

@property int xxx;

相当于:

@interface XClass: NSObject{

int xxx;

}

-(void) setXxx: (int) n;

-(int) xxx;

相当于声明了变量(int) xxx并且声明了两个方法setXxx和xxx。注意set方法前面有set,get方法前面没有get。(所以可以直接用xClass.xxx访问xxx,相当于调用了xxx方法。)

(6)、在implementation部分用@synthesize指令定义内容如下:

@synthesize xxx;

相当于:

@implementation XClass

-(void) setXxx: (int) n{

xxx = n;

}

-(int) xxx{

return xxx;

}

相当于把两个函数的实现方法补全,如果没有使用@synthesize指令的话,则编译器会生成以下代码:

@implementation XClass {

int _xxx;

}

-(void) setXxx: (int) n{

_xxx = n;

}

-(int) xxx{

return _xxx;

}

(7)、所谓的实例变量会被自动命名为以“_”开头,只是对于@implementation部分而言。在@interface部分和在main函数中,不论是用点运算符访问属性还是用方括号调用setter和getter方法,属性都是没有以“_”开头的。从(6)中第二部分可以看到,setter和getter方法涉及到属性的名字还是用xxx,只有在方法内要使用到具体属性了,才是_xxx。即是说,所谓的以“_”开头的属性,只有在没有定义@synthesize的情况下,在@implementation部分中定义的方法需要访问到的属性才是以“_”开头。其他地方一概视为正常命名。

(8)、使用@property指令和@synthesize指令定义属性后,如果使用点运算符访问,可以直接用xClass.xxx访问到set方法和get方法;用方括号访问的话,则必须是[xClass setXxx]和[xClass xxx];

5、关于点运算符和方括号:

(1)、点运算符一般用在属性上,即是用来设置或取得变量的值,比如:

aPerson.sex;

(2)、方括号一般用在方法上,比如:

[aPerson run];

(3)、两者可混用,从语法上来讲不算错误,但是最好不要混用;

6、关于多个参数的方法:

(1)、方法的声明如下例:

-(void) setTo: (int) n over: (int) d;

注意n是形参而over是第二个参数名了;

(2)、方法的使用如下例:

[aClass setTo: 1 over: 2];

照着方法声明时的格式去填参数值,一个一个来;

(3)、关于(1)中的方法声明,其实参数名over可以省略,变成如下形式:

-(void) setTo: (int) n : (int) d;

同样是允许的,但是会使得代码容易混淆,最好不要使用这种风格;

7、如果一个方法要以某个类的实例作为参数,那么在声明这个方法的时候记得要用上“*”,如下:

 -(void) xxx: (class *) c

8、实例变量和局部变量:

(1)、实例变量指在接口部分声明的(或从父类继承来的)变量,实例方法可以直接访问它们的实例变量;

(2)、作用域限于定义它的程序块之间的变量称为局部变量,比如方法的形参。

9、关于static关键字:

(1)、使用static声明过的变量是为静态变量,它的默认值是0;

(2)、静态变量的值还是可以改变的,static的作用只是让这个变量的值一直保存着;

(3)、如下,有代码段如下:

-(int) showPage{

static int pageCount = 0;

++PageCount;

return PageCount;

}

如果这个函数没有static的话,那么每次调用得到的返回值都是1,每次重新调用这个方法,变量的值就会重新分配;使用static之后,第一次调用的返回值是1,第二次是2,以此类推,变量的值会一直存在并累加;

(4)、(3)的代码段是用来计算页数的,把pageCount设为实例变量和设为局部静态变量的意义是不同的:

设为实例变量则计算的是某个实例的页数,如果有a和b两个实例,那么a和b的pageCount的值不一定相同;

设为局部静态变量的话,则pageCount的值等于a和b的页数之和,因为a和b对这个方法的调用都会被pageCount累加起来;

10、self关键字:相当于this关键字,可以直接调用当前对象;

时间: 2024-12-29 11:51:46

OC基础4:类和方法的相关文章

OC关于NSDate类的方法和应用的总结!(全)

<span style="font-size:18px;">//1.创建日期对象 //创建的NSDate对象,获得的永远是0时区时间,如果要是求东八区时间,就加8个小时 NSDate *date = [NSDate date]; NSLog(@"%@",date); //创建明天此时的日期(时间间隔都是以秒为单位计算的) NSDate *tomorrow  = [NSDate dateWithTimeIntervalSinceNow:24*60*60];

OC基础知识--字符串处理方法

不可变字符串 [OC字符串的初始化] 1.字符串的初始化(减方法) NSString * str2 = [[NSString alloc]init]; 2.字符串的初始化(加方法) NSString * str3 = [NSString string]; 3.字符串的初始化由另外一个字符串给 NSString * str4 = [[NSString alloc]initWithString:str1]; 4.将C语言的字符串给OC字符串作为初始化的值(减方法) NSString * str6 =

OC基础复习(三)之类方法和对象方法的理解

面向对象的难易点:其实也就是封装:要会调封装,也要会自己封装,封装就是给出一些接口,让我们去用,我们不关心其实现,但往往学的时候不踏实 说他容易是用着容易,只要有接口,就可以完成很多我们想要的功能,但往往分不清功能是自己能实现还是通过别人写好的框架或者方法来帮我实现 所以需要记忆一些常用方法和框架.把自己的算法思想和一些接口框架相结合. OC 有两种类型的方法,类方法和对象方法(也被称为实例方法) 1.类方法:以+开头,不分配内存空间(这句话,问题来了,为什么?) 什么时候分配内存空间,很显然只

OC基础(三)方法的注意事项、常见的错误以及与函数的区别

方法的注意点: 1.方法可以没有声明只有实现 2.方法可以只有声明没有实现, 编译不会报错, 但是运行会报错 3.如果方法只有声明没有实现, 那么运行时会报: reason: ‘+[Person demo]: unrecognized selector sent to class 0x100001140’ 4.发送了一个不能识别的消息, 在Person类中没有+开头的demo方法 reason: ‘-[Person test]: unrecognized selector sent to ins

java基础知识—类的方法

1.定义类方法的语法: 访问修饰符 返回值类型 方法名(){ 方法体: } 2.方法名的规范: 1.必须以字母下划线·"-"或"$"开头 2.可以有数字,但不能以数字开头. 3.如果方法名是以多个单词组成,第一个单词首字母小写 其后单词首字母单大写 4.方法名都采用动词 3.方法的返回值: 1.有返回值:(return) 必须告知返回值的数据类型,并且返回相应的值.例:public String getName(){ return "张三" }

第一部分 1.12 OC基础语法-类的声明和实现,static和变量,typedef

新建一student类 只是用来声明Student这个类有哪些成员变量和方法 #import <Foundation/Foundation.h> // @interface代表声明一个类 // : 代表继承 @interface Student : NSObject { // 成员变量要定义在下面的大括号中{} int age; int no; } // 在这里声明的所有方法都是公共 // age的get方法 // - 代表动态方法 + 代表静态方法 - (int)age; // age的se

OC基础--常用类的初步介绍与简单使用之NSDate

一.创建一个时间 NSDate *date = [NSDate date]; // 打印出的时间是0时区的时间(北京--东八区) NSLog(@"%@",date); 二.日期格式化类NSDateFormatter 1>日期转化字符串 1 // 创建一个NSDate对象 2 NSDate *date = [NSdate date]; 3 // 创建一个NSDateFormatter对象 4 NSDateFormatter *formatter = [[NSDateFormatte

OC基础--常用类的初步介绍与简单实用之集合类

集合类的异同点 一.NSArray\NSMutableArray *有序 *快速创建(只有不可变数组可以):@[obj1, obj2, obj3]; *快速访问元素:数组名[i] *只能存放对象 二.NSSet\NSMutableSet *无序 *只能存放对象 三.NSDictionary\NSMutableDictionary *无序 *快速创建(只有不可变数组可以):@{key1 : value1, key2 : value2,...} *快速访问元素:字典名[key] *只能存放对象 四.

OC基础--常用类的初步介绍与简单实用之NSString

一.NSString:不可变字符串/NSMutableString:可变字符串 1>字符串的常用创建方式: (1)NSString *s1 = @"Chaos"; (2)NSString *s2 = [[NSString alloc] initWithFormat:@"age is %d",20]; (3)C字符串-->OC字符串 NSString *s3 = [[NSString alloc] initWithUTF8String:"Chao

OC基础知识--字典处理方法

不可变字典 [初始化] 1.  value   —  key NSDictionary * dict =[[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil]; 2.批量设置键值对    value — key NSArray * arr1 = @[@"1",@"2"]; NSArray * ar