A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

.语法  如果成员变量有 age,_age,set,get方法具体是改变age,还是_age

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
你以后注意了,苹果官方要求声明的成员变量最最最好加下划线   _  
其目的就是要区分成员变量局部变量的不同,注意使用点方法前必须得有setget方法
例如:
  1. - (void) setAge:(int)age
  2. {
  3.         _age = age;
  4.         NSLog(@"setAge");
  5.         //self.age=age;//会引发死循环  
  6. }
  7. - (int)age
  8. {
  9.         NSLog(@"age");
  10.         return _age;//或者return self->age;
  11.         //return self.age;//死循环
  12. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 cnchenys 于 2014-4-3 23:10 编辑

看你set和get的实现方法.

@interface Person : NSObject
{
    int age;
    int _age;
}
- (void)setAge:age;
- (int)age;
@end

@implementation Person
- (void)setAge:age
{
    self->age=age; //如果self值得是age 那么就是给age赋值  如果指的是_age那就是给_age赋值
}
- (int)age
{
    return age;   // _age毅然
}

@end
如果是用@property生成的,则是默认_age属性的set和get方法,手写的话,如上描述

点语法:如果是赋值的话,为set方法,例如:  p.age=10; ==  [p setAge:10];
若果是在取值,则为get方法,例如: NSLog(@"%d",p.age); == NSLog(@"%d",[p age]);

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
是_age,一般成员变量都命名为_age而不是age,所以尽量不要在你的成员变量中出现age。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
使用点语法代替传统的get方法和set方法

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

2 {

3 @autoreleasepool {

4 Student *stu = [[Student alloc] init];

5

6 // 设置age的值

7 stu.age = 10; // 等价于[stu setAge:10];

8

9 // 取出age的值

10 int age = stu.age; // 等价于int age = [stu age];

11

12 NSLog(@"age is %i", age);

13

14 [stu release];

15 }

16 return 0;

17 }



死循环注意
-(void)setAge:(int)age{
       //下面代码会引发死循环
      self.age = age;
}
-(int)age{
       //下面代码会引发死循环
       return self.age;
}

这个就说的很详细了 ,主要跟你自己写的代码有关,不过一般是-age
回复 使用道具 举报
1、如果你的setter和getter是用@property来替代的,那么默认访问的是_age。
2、如果你写了synthesize:
1>比如synthesize age;那么他会改变age。
2>synthesize age = _age; 这样写的话他会改变_age。
3、如果你是手写的setter和getter,那就要看你的代码了。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马