OC——类与对象
面向对象的程序设计过程中有两个重要的概念:类和对象,其中类是某一批对象的抽象,可以把类理解成某种概念,对象才是一个具体存在的实体,从这个意义上看,我们日常所说的人其实都是人的实例而不是人类吧。 对于面向对象编程来说,成员变量和方法都是非常重要的概念: 🎇成员变量:用于描述该类的对象的状态数据,比如:我们定义一个人,可能需要关心人的性别,年龄,身高等状态数据,那么就应该将这些状态定义为成员变量。 🎇方法:用于描述该类的行为。比如:程序需要关心人具有走路,吃饭,工作等行为,那么程序就应该为人这个类声明走路吃饭工作等方法。
总的来说,如果我们把人定义成一个类,那么对象就可以理解为张三,李四,等一个个的人,而成员变量就指的是这个人的特征,也就是身高,体重等,方法就是表示类的行为,比如吃饭,睡觉等。
Objective-C中定义类需要分为两个步骤: 🎇接口实现:定义该类包含的成员变量和方法 🎇实现部分:为该类的方法提供实现 然后我们来看看怎么实现一个类的定义: 首先我们要写类的接口部分,语法格式如下图: 我们就按照这个格式来声明一个类:
#import <Foundation/Foundation.h>
@interface FKPerson : NSObject {
NSString *_name;
int _age;
}
- (void)setName:(NSString *)name andAge:(int)age;
- (void)say:(NSString *)content;
- (NSString *)info;
+ (void)foo;
@end
方法: 在这里我们看到方法声明里,有的前面加上+,有的前面加上了-,+代表的是该方法是类方法,直接用类名即可调用,-代表该方法是实例方法,必须用对象才能调用。 顺便我们来看看方法声明的语法:
对于方法的使用要注意以下几个方面: 🎆方法不能独立定义,只能在类体里定义 🎆从逻辑意义上看,方法要么属于该类的本身,要么属于该类的一个对象 🎆永远不能独立执行方法,执行方法必须使用类或对象作为调用者
通过刚才对方法的了解,我们可以看出方法和函数有很多相同的地方,其中有一个不同点就是方法的形参数量可变,如果在形参名后加上逗号和三点(,…),则表示该形参可以接受多个参数值,下面我们来定义一个形参个数可变的方法:
#import <Foundation/Foundation.h>
@interface VarArgs : NSObject
-(void)test: (NSString *) name,...;
@end
为了在程序中获取个数可变的形参,需要使用如下关键字: 🎇va_list :这是一个类型,用于定义指向可变参数列表的指针变量 🎇va_start :这是一个函数,该函数指定开始处理可变形参的列表,并让指针 🎇va_end: 结束处理可变形参,释放指针变量 🎇var_arg:该函数返回获取指针当前指向的参数的值,并将指针移动到指向下一个参数。
🎆🎆🎆 然后我们来看类实现部分的语法: 然后按照上面的类实现部分的语法,我们来对上面声明过的类进行实现:
@implementation FKPerson {
int _testAttr;
}
- (void)setName:(NSString *)n andAge:(int)a {
_name = n;
_age = a;
}
- (void)say:(NSString *)content {
NSLog(@"%@", content);
}
- (NSString *)info {
[self test];
return [NSString stringWithFormat:
@"姓名:%@,年龄:%d", _name, _age];
}
- (void)test {
NSLog(@"只在实现部分定义的test方法");
}
+ (void)foo {
NSLog(@"FKPerson类的类方法,通过类名调用");
}
@end
我们在上面代码里看到了[self test];这一串代码,这个代码中用到了self这个关键字,这个关键字的作用就是在一个方法中调用另一个方法。上述代码就是说在info这个方法里调用text这个方法。
|