文档章节

object-c面向对象2

芥末小弟
 芥末小弟
发布于 2017/03/01 09:54
字数 743
阅读 3
收藏 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
作品 0
昌平
面向对象内核设计模式,第二部分

Object-oriented Design Patterns in the Kernel, Part 2 面向对象内核设计模式,第二部分 posted by Elv13 on Mon 27th Jun 2011 14:17 UTC 发表于:2011年6月27日 北京时间22:17 "In the f......

xyxzfj
2011/06/28
0
0
【python】博客是必须写的-3 面向对象

1.基本概念 ·面向对象是一种编程方式,此编程方式是基于"类"和"对象"的使用·类:是一个模板,模板中包装了多个"函数"供使用(可以将多个函数共用的变量封装到对象中)·对象:根据类创建的实例,...

Mx孔小发
01/04
0
0
Object-C学习笔记(一)

最近休息在家,闲来无事想搞一个iphone的游戏玩玩,于是买了本 图灵 的 Object-C基础教程 看了看,这本书还算比较基础,里面讲解知识点也比较通俗易懂,尤其是做过一些开发的人,基本上没有什...

logbird
2012/11/29
0
2
Cocoa(Objective-C) 到 Lisp 的桥转换基本规则 (教程翻译)

Cocoa(Objective-C) 到 Lisp 的桥转换基本规则 (教程翻译) 原文地址:网络: http://trac.clozure.com/ccl/wiki/CocoaBridgeTranslation 原文标题:Cocoa Bridge Translation翻译者:FreeBlues ......

FreeBlues
2013/07/29
0
3
快速上手Gobject

What is G-object? —很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如C++、Java、C#等等,而C语言是用来编写结构化程序的。 —事实上,面向对象只...

shezjl
2016/01/17
44
0

没有更多内容

加载失败,请刷新页面

加载更多

idea 通过jpa自动生成实体类

引入jpa包 打开persistence窗口 右键选择连接数据库 如果数据库没配置,则可以在下图选项中配置 选择好数据库和实体类的生成地址

斩神魂
31分钟前
1
0
tcpdump 命令

TCPDUMP简介 tcpdump 是一个很常用的网络包分析工具,可以用来显示通过网络传输到本系统的 TCP/IP 以及其他网络的数据包。tcpdump 使用 libpcap 库来抓取网络报,这个库在几乎在所有的 Linu...

寰宇01
39分钟前
2
0
软件的Alpha、Beta、RC、GA版本的区别

Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。 Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。 RC:(Release Candidate) 顾名思义...

乔老哥
40分钟前
3
0
慢雾安全海贼王:从DApp亡灵军团,细说区块链安全

本文转载自微信公号“万向区块链”,为慢雾安全负责人海贼王在万向区块链实验室举办的2018上海区块链国际周-技术开放日上的演讲速记整理。 这张图总结了智能合约攻防的各个方面,分为两大部分...

万向区块链
46分钟前
14
0
Matlab编程之——卷积神经网络CNN代码解析

卷积神经网络CNN代码解析 deepLearnToolbox-master是一个深度学习matlab包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoE ncoder(堆栈SAE,卷积CAE)的作...

酒逢知己千杯少
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部