点语法:点语法的本质还是方法调用
Person *p = [Person new];
// 点语法的本质还是方法调用
p.age = 10; // [p setAge:10]
一.点语法注意点:
@implementation Person
//setter方法中的死循环
-(void)setAge:(int)age
{
// 会引发死循环,不停的调用setter方法[self setAge:age]
self.age = age;
}
- (int)age
{
// 下面也会引发死循环,调用getter方法[self age]
return self.age; // 应该这样输出:return _age; 或者 return self->_age;
}
在使用点语法中,可以使用断点进行测试,确保输出无误。
二.成员变量的四种作用域
1.@public // 在任何地方都可以访问成员变量
@interface Person : NSObject
{
@public
int _age;
int _height;
}
2.@private // 只能在当前类的对象方法中直接使用(私有)
@interface Person : NSObject
{
@private
int _age;// 默认就是私有
}
3.@protected // 能在当前类和子类的对象中访问,默认情况在.h文件下什么都不写就是@protected
@interface Person : NSObject
{ //什么都不写,默认就是@protected
int _age;
int _height;
}
4.@package // 同一个体系“框架”可以访问,介于@private和@public之间,一般很少用到,暂不描述
成员变量的注意点:
默认情况下在声明(@interface)中的变量默认是@protected,在实现(@implementation)中默认是@private
原因是:.m文件一般不能被包含,所以它是私有的。
@interface和@implementation不能声明同名的变量
三. 两个关键字@property和@synthesize
@property作用:帮助我们自动生成setter 和getter的声明
@interface Person : NSObject</span></span>
@property int age; // 自动生成setter声明,和getter声明</span></span>
// -(void)setAge:(int)age;
// -(int)age;
</pre><pre name="code" class="objc">@end
@synthesize作用:帮助我们自动生成setter 和getter的实现
@implementation Person
//会自动生成age的setter和getter实现,并且会访问_age这个成员变量
@synthesize age = _age;
@end
也可以多个声明
@interface Person : NSObject</span>
//生成age和weight属性的声明
@property age = _age, weight = _weight;
@end
多个实现
@implementation Person
//生成age和weight属性的实现
@synthesize age = _age, weight = _weight;
@end
注:在没有写成员变量的情况下,@synthesize会自动生成所需要成员变量。
例如:
@implementation Person
//会访问_age这个成员变量,如果不存在,就会自动生成@private类型的_age变量
@synthesize age = _age;
@end
注:如果在实现中@implementation
@synthesize age; // 它会访问跟名字一模一样的age
在最新的xcode中,已经不需要写@synthesize,@property已经独揽所有的任务,可以自动生成setter和getter的声明与实现
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)