我们知道在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 作用域限定的实力变量,可以在这个类里面和这个类的派生类里面可以访问这个变量,在类外的访问是不推荐的,但也可以访问。