黑马程序员技术交流社区
标题:
.语法 如果成员变量有 age,_age,set,get方法具体
[打印本页]
作者:
秋天De神话
时间:
2014-4-3 22:48
标题:
.语法 如果成员变量有 age,_age,set,get方法具体
.语法 如果成员变量有 age,_age,set,get方法具体是改变age,还是_age
作者:
程浩
时间:
2014-4-3 22:58
你以后注意了,苹果官方要求声明的成员变量最最最好加下划线 _
其目的就是要区分
成员变量
和
局部变量
的不同,
注意
:
使用点方法前必须得有setget方法
例如:
- (void) setAge:(int)age
{
_age = age;
NSLog(@"setAge");
//self.age=age;//会引发死循环
}
- (int)age
{
NSLog(@"age");
return _age;//或者return self->age;
//return self.age;//死循环
}
复制代码
作者:
cnchenys
时间:
2014-4-3 22:58
本帖最后由 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]);
作者:
沙洲冷
时间:
2014-4-3 23:02
是_age,一般成员变量都命名为_age而不是age,所以尽量不要在你的成员变量中出现age。
作者:
agelessman
时间:
2014-4-3 23:41
使用点语法代替传统的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
作者:
于清扬
时间:
2014-4-4 21:35
1、如果你的setter和getter是用@property来替代的,那么默认访问的是_age。
2、如果你写了synthesize:
1>比如synthesize age;那么他会改变age。
2>synthesize age = _age; 这样写的话他会改变_age。
3、如果你是手写的setter和getter,那就要看你的代码了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2