第一讲:类和对象
问题1.类与对象(抽象与具体)
类是具有一定特征和行为的事物的抽象,好比人类就是一个类,是一个具有自己特性或是行为的一个大集合,然而每个个体(称为对象)又是不同的 :你 我 他。也就是说,类是对象的类型,而对象是类的实例。
问题2.减号方法与加号方法
+alloc是一个+号方法,也是一个类方法,只能由类去调用。
-init是一个-号方法,也是实例方法,只能由对象去调用。
这两个方法的返回值都是,id类型的,即通用的对象类型,可以指向任何对象。
一.类1.类的声明
在.h文件中声明类的格式:
@interface类名 : 父类名
{成员变量}成员方法
@end
例如:
@interface Person : NSObject
{
@public //可见度为公开
int age; //年龄
NSString *name; //姓名NSString是字符串类型,NSString是一个类
int number; //微信号
}
//- (返回值类型)方法名;
- (void)eat;
- (void)sleep;
- (void)daDouDou;
- (void)sayHi;
@end
2.类的实现在.m文件中实现类的格式:
@implementation类名
@end
【只要在.h中声明则必须在.m中实现】
例如:
@implementation Person
- (id)init//系统方法有系统声明 我们只需实现即可
{
age = 22;
number = 57;
name = @"Micky";
return self;//self代表自己是当前这个类的一个对象
//self将消息发送给本类对象 super将消息发送给父类对象
}
- (void)eat
{
NSLog(@"Micky is Eating");
}
- (void)sleep
{
NSLog(@"sleeping");
}
- (void)daDouDou
{
NSLog(@"dadoudou");
}
- (void)sayHi
{
NSLog(@"大家好,我今年%d岁,名叫%@", age, name);
NSLog(@"hello Object-C");
}
@end
二.对象
1.创建对象两步走:分配内存空间 + 对象初始化
1).分配内存空间 :[执行方法的目标执行的方法];
例如:
Person *p = [Person alloc];//用一个Person类型的指针指向分配的内存首地址
alloc方法:开辟内存空间,将内存里面的所有值都归纳0,即将所有的成员变量的默认值都置成0或者null
2).对象初始化
p = [p init];
或者两步连写(常用连写的方式创建对象)
Person *per = [[Personalloc] init];//执行顺序: 括号从里到外,等号从右到左
2.利用对象调用方法:[对象名 方法名];
[per sayHi];
[per eat];
[per sleep];
[per daDouDou];
3.对成员变量操作
//当成员变量被@public可见度修饰的时候 可以使用->访问
per->age = 23;
per->name =@"mickymicky";
per->number = 200;
[per sayHi];
4.获取成员变量的值
NSLog(@"年龄:%d", per->age);
第二讲:方法
一.成员变量的可见度 : (系统默认为@protected[为保系统安全性常用默认的])修饰自己下方的所有成员变量,直到碰到另一个可见度修饰词
@public: 公开的所修饰的所有成员变量都可以在main.m中被访问[赋值/取值]
@protected:受保护的所修饰的成员变量不可以被外界访问
@private: 私有的所修饰的成员变量不可以被外界访问也不能被继承,@protected则可以
//代码规范: _名字 -->表示不公开的
NSString *_name;
int _age;
int _number;
float _score;
NSString *_sex;
二.带参数和返回值的方法:一个受保护的成员变量如果外界要访问 则需要这个类对外界提供两个方法
1.赋值方法 /setter方法
- (返回值类型)方法名:(参数类型)参数名;//方法名:setNumber:
- (void)setNumber:(int)number;
- (void)setName:(NSString *)name;
- (void)setSex:(NSString *)sex;
- (void)setAge:(int)age;
- (void)setScore:(float)score;
2.取值方法 /getter方法:一定不要加get!!!!!!!!!
- (int)age;
- (NSString *)name;
- (int)number;
- (float)score;
- (NSString *)sex;
3.带多参的方法[但是只能返回单个值]
//方法名 setName:setAge:setNumber:setSex:setScore:
- (void)setName:(NSString *)name
setAge:(int)age
setNumber:(int)number
setSex:(NSString *)sex
setScore:(float)score;
4.带多个参数的初始化方法
必须是-号方法
返回值必须是id类型
如果自定义的初始化方法带有参数,则方法名必须以initWith开头
- (id)initWithAge:(int)age
andName:(NSString *)name;
- (id)initWithNumber:(int)number
andSex:(NSString *)sex
andScore:(float)score;
完整的.h文件代码如下:@interface Student : NSObject
{
NSString *_name;
int _age;
int _number;
float _score;
NSString *_sex;
}
//取值
- (int)age;
- (NSString *)name;
- (int)number;
- (float)score;
- (NSString *)sex;
//赋值 三种 可任选//1.
- (void)setNumber:(int)number;
- (void)setName:(NSString *)name;
- (void)setSex:(NSString *)sex;
- (void)setAge:(int)age;
- (void)setScore:(float)score;
//2.
- (void)setName:(NSString *)name
setAge:(int)age
setNumber:(int)number
setSex:(NSString *)sex
setScore:(float)score;
//3.
- (id)initWithAge:(int)age
andName:(NSString *)name;
- (id)initWithNumber:(int)number
andSex:(NSString *)sex
andScore:(float)score;
@end
三.在.m文件中实现:@implementation Student
- (int)age
{
return _age;
}
- (NSString *)name
{
return _name;
}
- (int)number
{
return _number;
}
- (float)score
{
return _score;
}
- (NSString *)sex
{
return _sex;
}
- (void)setAge:(int)age
{
_age = age;
}
- (void)setName:(NSString *)name
{
_name = name;
}
- (void)setNumber:(int)number
{
_number = number;
}
- (void)setScore:(float)score
{
_score = score;
}
- (void)setSex:(NSString *)sex
{
_sex = sex;
}
- (void)setName:(NSString *)name setAge:(int)age setNumber:(int)number setSex:(NSString *)sex setScore:(float)score
{
_name = name;
_age = age;
_number = number;
_sex = sex;
_score = score;
}
- (id)initWithAge:(int)age andName:(NSString *)name
{
_age = age;
_name = name;
return self;
}
- (id)initWithNumber:(int)number andSex:(NSString *)sex andScore:(float)score
{
_number = number;
_sex = sex;
_score = score;
return self;
}
@end