黑马程序员_OC面向对象之核心语法

一、点语法

点语法的本质其实就是调用类的set 和 get 方法,具体例子如下:

//
//  Person.h
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age;
}

- (void)setAge:(int)age;
- (int)age;

@end
    //
//  Person.m
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}

@end
//
//  main.m
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

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

    @autoreleasepool {
        
        Person *p = [Person new];
        // insert code here...
        p.age = 10;  //相当于调用 [p setAge];
        
        int a = p.age; //相当于调用 [p age];
        
        NSLog(@"a的值是:%d",a);
        
    }
    return 0;
}
二、@property 和 @synthesize的使用


1.@property 是用来自动生成某个成员变量的setter 和 getter 声明 @synthesize 实现成员变量的 getter 和 setter 方法

//
//  Person.h
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age;
    NSString *_name;
}

//@property 自动生成成员变量的getter 和 setter 方法的声明
@property int age;
@property NSString *name;

@end

    //
//  Person.m
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "Person.h"

@implementation Person

//@synthesize 实现成员变量的 getter 和 setter 方法的实现
//@synthesize age = _age;
//@synthesize name = _name;
//精简写法
@synthesize age = _age, name = _name;

@end

三、构造函数

1. 构造函数的使用

#import <Foundation/Foundation.h>
#import "Person.h"

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

    @autoreleasepool {
        
      //  Person *p = [Person new];
        
        //创建对象的正式写法 ,+alloc 用来分配存储空间, -init 用来初始化,即构造方法
        Person *p = [[Person alloc]init];
        
        //id 类型是指向所有对象的指针 ,相当于NSString *
        id d = [Person new];
        // insert code here...
        p.age = 10;  //相当于调用 [p setAge];
        
        int a = p.age; //相当于调用 [p age];
        
        NSLog(@"a的值是:%d",a);
        
    }
    return 0;
}

2.构造函数的重写

构造函数的重写,要在类的实现中重写- init 方法,重写构造方法,可以给成员变量初始化为固定的值

重写构造方法和自定义构造方法的具体实现见以下示例

//
//  Person.h
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age;
    NSString *_name;
}

//@property 自动生成成员变量的getter 和 setter 方法的声明
@property int age;
@property NSString *name;

//自定义构造方法的声明
- (id)initWithAge:(int)age andName:(NSString *)name;
@end
    //
//  Person.m
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "Person.h"

@implementation Person

//@synthesize 实现成员变量的 getter 和 setter 方法的实现
//@synthesize age = _age;
//@synthesize name = _name;
//精简写法
@synthesize age = _age, name = _name;

//重写init构造方法
- (id)init
{
    //必须调用父类的init方法,初始化父类的成员变量和属性
    
    if(self = [super init])
    {
        //初始化成功
        _age = 5;
    }
    return self;
}

//自定义的构造方法的实现,自定义构造方法返回值是 id ,方法名以 init开头
- (id)initWithAge:(int)age andName:(NSString *)name
{
    if(self = [super init])
    {
        _age = age;
        _name = name;
    }
    return self;
}
@end


//  main.m
//  OC核心语法
//
//  Created by LPMac on 14-5-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

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

    @autoreleasepool {
        
        Person *p1 = [[Person alloc]initWithAge:33 andName:@"jack"];
        
        NSLog(@"年龄是:%d,名字是:%@",p1.age,p1.name);
        
    }
    return 0;
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值