我们知道在c#中有访问私有成员变量的get 和set方法。这个目的是用来公开实力对象的私有变量。我看了下ios的访问修饰符。也就是private,public,protected.这些基本上都和c#的差不多。
下面介绍下。ios的getter 和 setter 以及属性的书写方式。
这里我写一个Song类 (歌曲类)。
他有的属性有 歌曲名字(title),歌唱家(artist),以及播放时间(duration).
我利用xcode建立了一个基本的类(这里和c和c++特别像,有.h 和.m文件组成一个类)
我们在上个博客中都知道了关于object-c声明类的方式,如下:
.h文件的声明部分
@interface xxx{
//私有变量声明
}
//类的方法的声明 - 代表属于实力的 (对象的) + 代表属于类的
@end
.m文件的实现部分
@implementation xxx{
//方法的实现 这里可以实现getter和setter的方法
}
@end
demo:
1 @interface Song{ 2 NSString *title;//歌曲名 3 NSString *artist;//艺术家 4 long int duration;//播放时间 5 } 6 //get 和set方法 7 -(NSString *) title; 8 -(void)setTitle:(NSString *)newTitle; 9 -(NSString *)artist; 10 -(void)setArtist:(NSString *)newArtist; 11 -(long int)duration; 12 -(void)setDuration:(long int)newDuration; 13 @end
头文件声明部分
实现部分
@implementation Song -(NSString *) title{ return title; } -(void) setTitle:(NSString * newTitle){ title=newTitle; } ....... @end
main函数:
Song *mySong=[[Song alloc] init];
[mySong setTitle:@"爱你一万年"]//此处会调用set函数
NSLog(@"mysong title is %@",[mySong title]);//此处会调用get函数
上述的demo是针对 我们常规的get和set的写法,学过c#的知道 如果公开一个私有变量的方式还有属性的方式。例如 public int stuId{get;set;};
这样可以了,我在ios的教学中也学习了 关于属性的使用。他是利用@syntheise 和@property 结合来使用的。
这样的话我们上面的Song类我们可以这样写:
1 //声明部分 2 @interface Song{ 3 NSString *title; 4 NSString *artist; 5 long int duration; 6 } 7 8 //属性的使用 9 @property(copy,readwrite) NSString *title; 10 @property(nonatomic,retain) NSString *artist; 11 @property(readonly) long int duration; 12 @end 13 14 //实现部分 结合@synthesize 15 16 @implementation Song 17 18 @synthesize title; 19 @synthesize artist; 20 @synthesize duration; 21 @end
到此 两种方式公开类的私有成员我们都可以知道吧。当然访问和设定都是可以[[类 开辟内存(alloc)] init]; [事例的类对象 title];或者 .
ios 类的构造方法
object-c的构造函数和java\c#的方式是不同的。
最重要一点 ,object-c中的修饰符只能在成员变量前加。(public 、protected、private)
@public 作用域限定的实力变量,可以在任何情况下访问;
@private 作用域限定的实力变量,只能在这个类里面才可以访问;
@protected 作用域限定的实力变量,可以在这个类里面和这个类的派生类里面可以访问这个变量,在类外的访问是不推荐的,但也可以访问。