您的位置:首页 > 其它

OC初始化函数和便利构造器

2015-07-27 11:02 399 查看
#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *str1 = [[Student alloc]init];

NSLog(@"str1 的地址为%p",str1);

str1.name = @"李树程";

str1.age = 23;

Student *str2 = [[Student alloc]initWithID:@"2010122" sexChoice:@"女"];

str2.name = @"潘志景";

str2.age = 23;

}

return 0;

}

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

NSString *_sexChoice;

}

@property (nonatomic,assign,readonly) NSString *sID;

@property (nonatomic,assign) NSInteger age;

@property (nonatomic,retain) NSString *name;

//自定义初始化方法

-(id)initWithID:(NSString *)sID sexChoice:(NSString *)sexChoice;

@end

//

// Student.m

// test_04

//

// Created by Ibokan on 15/7/24.

// Copyright (c) 2015年 ibokan. All rights reserved.

//

#import "Student.h"

@implementation Student

-(void)setAge:(NSInteger)age{

if (age < 18) {

_age = 18;

}

else{

_age = age;

}

}

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

/*

面向对象和面向过程的概念?

类和对象的概念?

如何用OC创建一个类

类是由属性和方法组成

实例变量(类的全局受保护的变量)

设置器和访问器

作用: 1.隐藏了实例变量

2.控制实例变量的读写

3.做正确性校验

缺点:太繁杂

解决方法:属性

@property和@sythesize

//对类来说

1.初始化方法 系统的 init

2.自定义初始化方法

-(id)initWithName:(NSString *)name;

3.便利构造器(初始化方法)

在外界构造类的对象时,开发者不需要关心其生命周期

OC中方法

静态方法(也叫类方法) +(id)

实例方法 -(id)

对于方法调用

对于类方法来说,他调用方式是用类来调用

对于实例方法来说,他调用是用对象来调用

*/

Student *str1 = [Student studentWithName:@"chenwen" age:25];

Student *str2 = [[Student alloc]initWithName:@"cten" age:25];

//等价于:Student *str2 = [Student alloc];

//str2 = [str2 initWithName:@"cten" age = 25;

}

return 0;

}

//self表示指向当前实例对象的指针

//super表示指向父类对象的指针

-(id)init{

NSLog(@"self 的地址为%p",self);

if (self = [super init]) {

_sID = @"2010222";

_sexChoice = @"女";

}

return self;

}

-(id)initWithID:(NSString *)sID sexChoice:(NSString *)sexChoice{

if (self = [super init]) {

_sID = sID;

_sexChoice = sexChoice;

}

return self;

}

@end

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

NSString *_sID;

}

@property (nonatomic,retain)NSString *name;

@property (nonatomic,assign)NSInteger age;

-(id)initWithName:(NSString *)name age:(NSInteger)age;

-(void)sayHello;

//便利构造器

//相当于在类里面再写一个跟类无关的方法

+(Student *)studentWithName:(NSString *)name age:(NSInteger)age;

//根据需要创建便利构造器

//根据需要来创建便利构造器相对应的方法

@end

#import "Student.h"

@implementation Student

-(id)initWithName:(NSString *)name age:(NSInteger)age{

if (self = [super init]) {

self.name = name;

self.age = age;

// _sID = @"asf";

// [self sayHello];

}

return self;

}

+(Student *)studentWithName:(NSString *)name age:(NSInteger)age{

Student *str = [[Student alloc]initWithName:name age:age];

// _sID = @"dfa";

// [self sayHello];

// self.name;

return str;

/*

在类的内部,对于静态来讲

1.他不能访问类的实例变量和属性

2.不能用self调用自带的方法和属性

*/

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: