------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
点语法
其实就是set方法和get方法
#import<Foundation/Foundation.h> @interface Person : NSObject { int _age; } - (void)setAge:(int)age; - (int)age; @end @implementation Person - (void)setAge:(int)age { _age = age; // 会引发死循环 //self.age = age; // [self setAge:age]; } - (int)age { return _age; // 会引发死循环 //return self.age;// [self age]; } @end int main() { Person *p = [Person new]; // 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; NSLog(@"%d", a); return 0; }
成员变量的作用域
@public : 在任何地方都能直接访问对象的成员变量
@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
@protected : 可以在当前类及其子类的对象方法中直接访问(@interface中默认就是@protected)
@package : 只要处在同一个框架中,就能直接访问对象的成员变量 //很少用
@interface和@implementation中不能声明同名的成员变量
@property @synthesize
@property会自动生成set方法和get方法
#import<Foundation/Foundation.h> @interface Person : NSObject { int _age; NSString *_name; } // @property:可以自动生成某个成员变量的setter和getter声明 @propertyint age; //相当于下面两行代码 //- (void)setAge:(int)age; //- (int)age; @propertyNSString *name; @end 在实现中 @implementation Person // @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量 @synthesize age = _age; @synthesize name = _name; @end
@synthesize height = _height; 会访问height这个成员变量,如果不存在,会自动生成@private了类型的成员变量(@private,子类不能访问)
缺点:成员变量变成私有的,如果想子类访问,提前定义成员变量
其实通过@property int height;
就可以
生成get方法和set方法
生成 _height成员变量
生成get方法和set方法的实现
@property 独揽了@synthesize的功能,
如果在声明由set方法那么只会帮助实现get方法,如果是手动实现的,编译器不会帮助自动生成
时间: 2024-10-31 22:23:51