Objective-C_面向对象
指引:
学编程的人必定学过C语言,C语言是一门面向过程的语言。然而OC是一门面向对象的语言,学过C#,java等语言的人都知道什么是面向对象。现在流行的高级语言大多数都面向对象,那么为什么学习面向对象语言呢?这个问题应该问一下自己。要理解面向对象,第一步就必须要搞明白类和对象
类和对象:
类是具有一些共同特征和行为的事物的集合。
对象就是类的具体实现。
类:
什么是封装
在OC中,特征是property(属性),行为是method(方法),一个对象便由诸多的属性和方法组成的。将属性和方法相结合,共同体现对象的特性,称之为封装。封装可以做到隐藏内部实现,稳定外部接口。
类的定义:
一个类中包括两个部分:@interface和@implementation。前者主要是属性或成员变量和方法的声明,后者则是方法的实现。
@interface部分:
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property(nonatomic,copy)NSString *name;//姓名
@property(nonatomic,assign)NSInteger age;//年龄
- (void)sayHi;//打招呼
//便利初始化
- (id)initWithName:(NSString *)aName age:(NSInteger)anAge;
//便利构造器
+ (id)studentWithName:(NSString *)aName age:(NSInteger)anAge;
@implementation部分
#import "Student.h"
@implementation Student
- (id)initWithName:(NSString *)aName age:(NSInteger)anAge
{
if (self = [super init]) {
_name = [aName retain];
if (anAge <= 0 ) {
_age = 18;
}else{
_age = anAge;
}
}
return self;
}
+ (id)studentWithName:(NSString *)aName age:(NSInteger)anAge
{
Student *student = [[Student alloc]initWithName:aName age:anAge];
return [student autorelease];
}
- (void)sayHi
{
NSLog(@"my name is %@,aged %ld",_name,_age);
}
- (void)dealloc
{
[_name release];
[super dealloc];
}
对象:
创建和使用对象
语法:
类名 *对象名 =[[类名 alloc]init];或者
类名 *对象名 = [类名 new];
创建的对象指向alloc(开辟内存)类方法和init(初始化)实例方法所开辟的内存空间,而new则是进行alloc和init这两步,相信学过c#和java的朋友对第二种应该很熟释。
由上面的代码可以看到方法声明那里有两种,一种是"-"开头的,另一种是"+"开头的。前者是实例方法,后者是类方法,也叫工厂方法
实例方法需要实例化对象之后通过对象进行调用的。实例方法允许调用实例变量和实例方法
类方法不需要实例化对象,可以直接通过类来调用,下面有一些类方法的潜规则,要留意一下。
类方法可以用调用类方法
类方法不可以调用实例方法,但是可以通过创建对象来访问实例方法。
类方法不可以使用实例变量。类方法可以用self,因为self不是实例变量。
下面类方法和实例方法的调用
Student *student = [Student studentWithName:@"jimmy" age:18];//调用类方法初始化对象
[student sayHi];//通过对象调用实例方法。
细心的朋友应该能留意到h文件上的代码有两个方法,一个是便初始化函数,另一个是便利构造器。这两个方法使给对象初始化灵活得多了,更加方便。
(对自己所学的进行了一次总结,欢迎大神吐槽)