构造方法: 用于在对象创建出来的时候为对象的成员变量或者属性赋值
实现方式:
(1)h文件存放类的申明 @interface开头 @end结尾
m文件存放类的实现 @implementation开头
(2)OC所有类必须继承基类NSObject,无多继承
(3)支持协议,支持多态
(4)”-“对象方法 “+”类方法
例如:创建一个类Person
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
Person.m
#import "Person.h"
@implementation Person
@end
下面我们在类中写一些方法
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
//成员变量
@public //全局变量
int age;
@private //私有变量 自己使用
float height;
@protected //受保护 子类和自己使用
NSString *name;
}
//构造方法
//以init开头一般都是构造方法 返回值为id类型 也可以写成(Person *)
- (id)init;
- (id)initWithAge:(int)newAge;
- (id)initWithAge:(int)newAge andHeight:(float)newHeight;
//set get方法
- (void)setAge:(int)newAge;
- (void)setHeight:(float)newHeight;
- (int)getAge;
- (float)getHeight;
@end
Person.m
#import "Person.h"
@implementation Person
{
//可以在这里声明成员变量 但只能自己用
}
//方法的实现
- (id)init
{
//super 表示父类 表示NSObject super init表示父类调用自己的init方法
//(1)分配内存 (2)内存空间指向self self表示对象本身
if (self = [super init]) {
age = 25;
height = 172;
name = @"jack";
}
return self;
}
- (id)initWithAge:(int)newAge
{
if (self = [super init]) {
newAge = 25;
height = 172;
name = @"jack";
}
return self;
}
- (id)initWithAge:(int)newAge andHeight:(float)newHeight
{
if (self = [super init]) {
newAge = 25;
newHeight = 172;
name = @"jack";
}
return self;
}
//set get方法的实现
- (void)setAge:(int)newAge
{
age = newAge;
}
- (void)setHeight:(float)newHeight
{
height = newHeight;
}
-(int)getAge
{
return age;
}
- (float)getHeight
{
return height;
}
@end
注:OC中的init方法的作用是在对象实例化后对其初始化
set和get方法:用来对数据进行属性赋值和读取属性值
我们在OC中定义一个类的时候,它的成员变量默认情况下是@protected的。这是因为我们的成员变量一般不允许直接去访问,如果需要修改和访问成员变量我们就要用到成员变量的set方法和get方法。set方法是用来给成员变量进行赋值的,也可以起到对传入的数据进行过滤的作用。
为什么使用set和get方法?
这是因为我们的成员变量要进行封装,不能让外部直接对变量进行修改和访问。这提高了安全性的同时也可以让我们不需要去关注实现的细节。
1.set方法作用:提供一个方法给外界设置成员变量的值,有一定的安全性
set方法的命名规范:
方法法必须以set开头,后面跟上成员变量的名称,并且成员变量的名称首字母大写
一定要接收一个参数,参数类型跟成员变量的数据类型一致
定义的形参名称不能跟成员变量名称一样
返回值一定是void
2.get方法的作用:返回对象内部的成员变量的值
get方法的命名规范:
返回值类型必须和成员变量的数据类型一致
方法名称一般跟成员名称一样
没有形参
下面我们设置一个类
小明同学用mac电脑学习过程
类 人–用一台mac学习OC
类 mac–开机 学习 关机
mac开机(加载内存-加载窗体-加载学习文件-显现窗体)-小明操作-关机(关闭当前窗体-清理内存-关闭电源)
mac.h
#import <Foundation/Foundation.h>
@interface mac : NSObject
- (void)open; //打开电脑
- (void)operation; //操作电脑
- (void)off; //关闭电脑
@end
mac.m
#import "mac.h"
@implementation mac
- (void)open
{
NSLog(@"打开电脑");
}
- (void)operation
{
NSLog(@"操作电脑");
};
- (void)off
{
NSLog(@"关闭电脑");
}
@end
xianming.h
#import <Foundation/Foundation.h>
#import "mac.h"
@interface xiaoming : NSObject
- (void)studyObjcWith:(mac *)macbook;
@end
xiaoming.m
#import "xiaoming.h"
@implementation xiaoming
- (void)studyObjcWith:(mac *)macbook
{
[macbook open];
[macbook operation];
[macbook off];
}
@end
最后调用两个对象完成事件
main.m
#import <Foundation/Foundation.h>
#import "xiaoming.h"
#import "mac.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
mac *Mac = [[mac alloc]init];
xiaoming *Xm = [[xiaoming alloc]init];
//小明同学用mac电脑学习过程
[Xm studyObjcWith:Mac];
}
return 0;
}
@end