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
#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
相关文章推荐
- 创业公司的的股权安排
- 关于系统运维监控的几点建议
- mysql优化第二天
- el表达式字符串的处理
- 判断两三角形是否相交
- codeforces 555
- Weka下使用Libsvm详细步骤
- hihocoder1040 矩形判断
- HGU3336 Count the string (KMP Next数组的应用)
- LeetCode(71) Simplify Path
- 【Tomcat】Tomcat报错追踪
- 时间轴two
- javascript写了个循环,但是不循环
- Git使fork项目与源项目保持一致方法
- Iterator迭代器、Comparable、Comparator比较器
- 判断手机号和邮箱
- Activity切换淡入淡出效果
- 如何用报表解决销售工作衡量问题
- CodeForces 463C - Gargari and Bishops
- android电池驱动(四)(自用)