object-c面向对象2
object-c面向对象2
芥末小弟 发表于8个月前
object-c面向对象2
  • 发表于 8个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

我们知道在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
View Code

 

 

到此 两种方式公开类的私有成员我们都可以知道吧。当然访问和设定都是可以[[类 开辟内存(alloc)] init];   [事例的类对象  title];或者 .

 

 

 

ios  类的构造方法

object-c的构造函数和java\c#的方式是不同的。

最重要一点  ,object-c中的修饰符只能在成员变量前加。(public 、protected、private)

@public 作用域限定的实力变量,可以在任何情况下访问;

@private 作用域限定的实力变量,只能在这个类里面才可以访问;

@protected 作用域限定的实力变量,可以在这个类里面和这个类的派生类里面可以访问这个变量,在类外的访问是不推荐的,但也可以访问。

 

共有 人打赏支持
粉丝 0
博文 202
码字总数 120715
×
芥末小弟
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: