OC学习2
1.Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
NSString *_sID;//全局变量
}
@property (nonatomic,strong)NSString *name;
@property (nonatomic,assign)NSInteger age;
-(id)initWithName:(NSString *)name Age:(NSInteger)age;//自定义初始化方法
//便利构造器
//+号后面的括号的内容为当前类的类型,如当前类为Student,继承于系统类NSObject
+(Student *)studentWithName:(NSString *)name Age:(NSInteger)age;
-(void)sayHello;
@end
2.Student.m
#import "Student.h"
@implementation Student
-(void)setName:(NSString *)name{
_name = name;
}
-(id)initWithName:(NSString *)name Age:(NSInteger)age{
if (self = [super init]) {
self.name = name;
self.age = age;
[self sayHello];
}
return self;
}
//便利构造器,相当于在类的里面再写一个跟类无关的方法
+(Student *)studentWithName:(NSString *)name Age:(NSInteger)age{
//在类中用类本身自带的初始化方法来构造对象,然后将对象当作返回值抛出.
// _sID = @"ss";
// self.name = @"ff";
// [self sayHello];
Student *st = [[Student alloc] initWithName:name Age:age];
return st;
/*
在类的内部,对于静态来讲:
1.它不能访问类的实例变
2.不用self调用类自带方法和属性
*/
}
/*
1.根据需要创建便利构造器
2.根据需要来创建便利构造器相对应的方法
*/
-(void)sayHello{
NSLog(@"Hello");
}
@end
3.main.m
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
/*
面向对象和面向过程的概念?
类和对象的概念?
如何用OC创建一个类?
类是由属性和方法组成的.(属性即实例变量)
实例变量(类的全局受保护的变量)
设置器和访问器
作用:
1.
2.
3.
缺点:太繁杂
由于以上...,所以有@property和@synthesize
@property相当于设置器和访问器的声明
@synthesize相当于设置器和访问器的实现,可省略不写
对于类来说:
1.初始化方法,系统的
-(init){
if(self = [super init]){
...
}
}
2.自定义初始化方法
-(id)initWith:(NSString *)name;
3.便利构造器 (初始化方法)
在外界构造类的对象时,开发者不需要关心其生命周期
OC中方法
静态方法 (类方法) 标识:+
实例方法 标识:-
在类的外边调用
对于类方法来说,它调用方式是用类来调用.
对于实例方法来说,它调用方式是用对象来调用.
*/
Student *st = [Student studentWithName:@"XXX" Age:21];
Student *st1 = [Student alloc];
st1 = [st1 initWithName:@"ibokan" Age:7];
}
return 0;
}