文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部