OC学习笔记(2)类的定义

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对象设置name123

//message对于方法,如果没有对应方法,则崩溃


//消息的接收者,一定是对象(对象指针)

//消息就是方法的名字和方法的实参。

//消息如果为nil则消息无效果

//消息的接收者和消息的实参可以是消息表达式


//对象的初始化

//1、分配空间,alloc继承自Object

//2、对象初始化,init继承自Object

//3、执行消息

//4release对象



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值