为了看这一块内容,画了不少时间,语法不学不写永远不会的。
OC中的类要写在两个文件中.h文件是声名文件.m文件是实现文件。
类的声名:
#import <Foundation/Foundation.h>
@interface 类名: 继承的类名<协议名1,协议名2>{ //或@interface 类名: 继承的类名{
//这里声明属性
}
//这里声明方法
@end
类的实现:
#import "类的声名文件" //如:#import "Dog.h"
@implementation 类名
//这里写要实现的方法
@end
看例子,去感悟吧:
Pig.h:
//
// Pig.h
// ClassTest
//
// Created by Moluth on 17/4/7.
// Copyright (c) 2017年 Moluth. All rights reserved.
//
#import <Foundation/Foundation.h>
//.h文件用于声明一个类 Pig类名 冒号表示继承 Pig继承自NSObject
@interface Pig : NSObject{
//这里声明属性
int _age;//属性
NSString *_name;
}
//这里声明方法
-(id)initWithNameAndAge:(NSString*)name : (int)age;//带参数构造方法
-(int)age;//getAge 无参数方法,int返回值
-(NSString*)name;//getName
-(void)setAge:(int)age;
-(void)setName:(NSString*)name;//单参数空返回值方法
-(void)setNameAndAge:(NSString*)name : (int)age;//双参数空返回值方法
@end
Pig.m:
//
// Pig.m
// ClassTest
//
// Created by Moluth on 17/4/7.
// Copyright (c) 2017年 Moluth. All rights reserved.
//
#import "Pig.h"
//.m文件为实现文件 实现Pig类
@implementation Pig
//构造方法
-(id)initWithNameAndAge:(NSString*)name : (int)age{
self=[super init];//调用父类构造方法 self相当于java中的this
_name=name;
_age=age;
return self;
}
-(int)age{
return _age;
}
-(NSString*)name{
return _name;
}
-(void)setAge:(int)age{
_age=age;
}
-(void)setName:(NSString*)name{
_name=name;
}
-(void)setNameAndAge:(NSString*)name : (int)age{
_age=age;
_name=name;
}
//重写父类该方法,在输出该对象时,会输出下面的字符串。
-(NSString*)description{
return [[NSString alloc] initWithFormat:@"[name:%@,age:%d]",_name,_age];
}
@end
main.m:
//
// main.m
// ClassTest
//
// Created by Moluth on 17/4/7.
// Copyright (c) 2017年 Moluth. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "pig.h"
int main(int argc, const char * argv[]) {
Pig *pig1=[[Pig alloc] init];
[pig1 setNameAndAge:@"熊大" :10];
NSLog(@"name=%@ age=%d obj=%@",[pig1 name],[pig1 age] ,pig1);//name=熊大 age=10 obj=[name:熊大,age:10]
Pig *pig2=[[Pig alloc] initWithNameAndAge:@"光头强" :38];
NSLog(@"%@",pig2);//[name:光头强,age:38]
return 0;
}