黑马程序员-------OC----点语法

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


使用自定义的方法创建get/ set方法
先定义一个类Person:

类的声明

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    NSString *_name;
    int _age;
}
-(NSString *)name;
-(void)setName:(NSString *)name;
-(int)age;
-(void)setAge:(int)age;
@end

类的实现:

#import "Person.h"

@implementation Person
-(NSString *)name{
    NSLog(@"调用name的get方法");
    return _name;
}
-(void)setName:(NSString*)name{
    NSLog(@"调用name的set方法");
    _name = name;
}
-(int)age{
    NSLog(@"调用age的get方法");
    return _age;
}
-(void)setAge:(int)age{
    NSLog(@"调用age的get方法");
    _age = age;
}
@end

main函数中:

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p = [[Person alloc] init];
        p.name = @"小明";
        p.age = 15;
        NSLog(@"name is %@,age is %d",p.name,p.age);
    }
    return 0;
}

可以看到执行结果为:

2015-09-19 12:09:36.792 点语法[1161:37353] 调用nameset方法
2015-09-19 12:09:36.792 点语法[1161:37353] 调用ageget方法
2015-09-19 12:09:36.793 点语法[1161:37353] 调用nameget方法
2015-09-19 12:09:36.793 点语法[1161:37353] 调用ageget方法
2015-09-19 12:09:36.793 点语法[1161:37353] name is 小明,age is 15

点运算符在OC的类对象中不能访问成员变量,如p.age=15,这里不是使用成员变量age,而是调用成员方法setAge,相当于给p.age赋值时,调用方法[p setAge:15]。
NSLog(@”%d”,p.age); 这里也不是使用成员变量age,而是调用成员方法age,使用p.age表达式的值时,实际上就是调用成员方法age,
[p age]。
“. ”不能调用成员变量,只是调用set函数和get函数的一种简写。这里不能理解为,定义了get函数和set函数就能调用成员变量,因为将这两个函数,不以一般形式书写时,使用p.age时,就会报错。

get和set函数的一般写法为:
Set函数
setter函数,对成员变量赋值。Set函数的一般写法以对age操作为例,写法为:
-(void)setAge:(int)newage。
Get函数
getter函数,对成员变量取值。Get函数的一般写法也以对age的操作为例,写法为:
-(int)age;

注意,OC中,为了防止self.age误认为是访问成员变量age, 所有的成员变量,推荐使用_age 。

点语法误区:

不能在setAge:方法中使用self.age = age,相当于在setAge:方法中调用 [self setAge:age ], 出现死循环,如 :

这里写图片描述

同样也不能在age方法中使用return self.age, 相当于return [self age];, 出现了死循环,如 :

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值