1、ASStudent.h
#import <Foundation/Foundation.h>
//NSObject
//内存分配,回收
//对象初始化、对象描述
@interface ASStudent : NSObject
{
//默认为protected
@protected
NSString *name;
@private
NSString *sid;
@public
unsigned int age;
}
//实例变量和方法不能混在一块,实例变量必须在花括号内
//没有const,static
//所有的变量都在堆区
//实例变量有访问限制,方法的访问都是public,没有权限限制
//方法不能在类的声明中实现
//OC中,一般自定义的类都继承自NSObject
//方法定义,-:表示方法的类型
//-(void)insertObject:(id)anObject atIndex:(NSUInteger)index
//每个单词的意义依次为:返回值类型,方法的签名部分,参数类型,参数名,方法的签名部分,参数类型,参数名
//具体可分为5部分
//方法的类型,返回值类型,方法的签名部分,参数类型,参数名
//+:类方法,通过类名来调用,类似于C++的静态函数
//-:实例方法,通过实例来调用
-(void) setName:(NSString*)aName;
-(NSString*) name;
-(void) setAge:(unsigned int)_age;
-(unsigned int) age;
-(void) setNameAndAge:(NSString*)aName age:(unsigned int)_age;
+(void) print;
@end
2、ASStudent.m
#import "ASStudent.h"
@implementation ASStudent
-(void) setName:(NSString *)aName
{
name = aName;
}
-(NSString*) name
{
return name;
}
-(void) setAge:(unsigned int)_age
{
age = _age;
}
-(unsigned int) age
{
return age;
}
-(void) setNameAndAge:(NSString *)aName age:(unsigned int)_age
{
name = aName;
age = _age;
}
+(void) print
{
NSLog(@"%s","test");
}
@end
3、main.m
#import <Foundation/Foundation.h>
#import "ASStudent.h"
int main(int argc, const char * argv[]) {
//自动释放池
@autoreleasepool {
// insert code here...
ASStudent* student = [[ASStudent alloc] init];
student->age = 20;
NSLog(@"%u",[student age]);
// student->name = @"yxk";//无法这样操作
[student setName:@"yxk"];
NSLog(@"%@",[student name]);
// student->sid = 20;//sid私有,无法访问
[student setNameAndAge:@"wdg" age:24];
NSLog(@"%@ %u",[student name],[student age]);
[ASStudent print]; [student release];
}
return 0;
}
//类方法和实例方法函数签名可以一样
//但是,类方法和类方法,实例方法不能和实例方法函数签名一样
打印结果
2014-12-19 09:28:11.720 test1[591:13725] 20
2014-12-19 09:28:11.721 test1[591:13725] yxk
2014-12-19 09:28:11.721 test1[591:13725] wdg 24
2014-12-19 09:28:11.722 test1[591:13725] test
//类方法和实例方法函数签名可以一样
//但是,类方法和类方法,实例方法不能和实例方法函数签名一样
//栈区、堆区、数据区、可读区(代码区)
//OC只能在堆区分配对象
//通过指针访问堆区内存
//空对象nil
//nil只能对应用在可以使用id类型的地方,即C++/Java得空指针对象
//OC面向对象最大的特色是消息传递模型,OC里,对象不调用方法,而是互相传递消息
//[receiver message],如[name setName:@"123"]:表示发送消息告知name对象设置name为123
//message对于方法,如果没有对应方法,则崩溃
//消息的接收者,一定是对象(对象指针)
//消息就是方法的名字和方法的实参。
//消息如果为nil则消息无效果
//消息的接收者和消息的实参可以是消息表达式
//对象的初始化
//1、分配空间,alloc继承自Object
//2、对象初始化,init继承自Object
//3、执行消息
//4、release对象