Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量
1 第一个OC控制台程序
1.1 问题
Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序。其运行于苹果公司的Mac操作系统下。
本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中,该程序的输出结果如下图:
图-1
1.2 方案
首先,启动集成开发工具Xcode。
然后,创建OC语言的工程。
最后,运行所创建的工程。
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:启动开发工具Xcode
在Dock中找到如下图圈出的图标,单击鼠标左键,界面如图-2所示:
图-2
如果在Dock中没有该图标,则在Finder中的“应用程序”文件夹中查找,界面如图-3所示:
图-3
如果在Finder的“应用程序”文件夹中也没有,则需要从App Store下载免费的Xcode。
步骤二:创建OC的工程文件
启动Xcode后会出现如下图的“Welcome to Xcode”窗口,界面如图-4所示:
图-4
如果上面的窗口未出现,则在桌面的最上边的菜单栏找到Window菜单,按下图选择“Welcome to Xcode”菜单项,同样可以调出上面的窗口,界面如图-5所示:
图-5
显示出Welcome to Xcode窗口后,选择鼠标左键单击Create a new Xcode project,出现Choose a template for your new project对话框窗口,左边选择OS X下的Application,右边选择Command Line Tool,界面如图-6所示:
图-6
单击Next按钮,出现下图。在图中:
1) Product Name为工程名,在本案例中工程名为Day01;
2) Organization Name为所在的公司名称,在本案例中为tarena;
3) Company Indentifier为公司标识,一般为所在公司官网网址的倒序,本案例中为com.tarena;
4) Type为要创建的工程类型,本案例中选择Foundation。
界面如图-7所示:
图-7
单击Next按钮,出现下图,在此对话框窗口中选择工程文件所在的位置,在本案例中,工程文件被放在“文稿文件夹”的“04_OBJECTIVE-C文件夹”中,界面如图-8所示:
图-8
单击Create按钮,OC工程文件就被创建出来了,刚刚创建的工程文件的界面如图-9所示:
图-9
在上图中,使用鼠标左键单击图中左边圈出的main.m,可以见到所创建Day01工程的主程序,界面如图-10所示:
图-10
步骤三:运行Day01的工程文件
创建完Day01的工程文件后,使用鼠标左键单击“运行”按钮运行程序,界面如图-11所示:
图-11
1.4 完整代码
本案例的完整代码如下所示:
- #import <Foundation/Foundation.h>
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- // insert code here...
- NSLog(@"Hello, World!");
- }
- return 0;
- }
2 编写Point2类
2.1 问题
本案例需要创建一个Point2类,类中有横坐标x、纵坐标y两个属性,并且有一个能显示位置show方法。在主程序中创建两个Point2类的对象,设置其横纵坐标,并将它们显示出来。
2.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义Point2类
在Day01工程中添加Point2类的方法是:在工程导航窗口中,用鼠标指向Day01文件夹,并单击鼠标右键,显示一个菜单,如图-12所示:
图-12
如图-12,选择“New File…”菜单项,打开新文件模板窗口。在该窗口中,选择OS X下的Cocoa,并在右侧选择“Objective-C class”,如图-13所示:
图-13
单击Next按钮,进入选择对话框,如图-14所示:
图-14
在图-14中,Class类名文本框中填入类名Point2;Subclass of父类名下拉框中选择NSObject。然后单击Next按钮,选择Point2类的文件存储地址,如图-15所示:
图-15
此时,一般直接按按钮Create即可。此时将返回工程窗口,在工程导航中,可以见到新生成的Point2类的两个文件,如图-16所示:
图-16
至此,Point2类创建完毕。
步骤二:在Point2类中添加属性
在Day01工程中找到Point2.h文件,在其中的Point2类中添加横坐标x和纵坐标y两个属性。
代码如下所示:
- @interface Point2 : NSObject
- {
- int x;
- int y;
- }
- @end
步骤三:在Point2类中添加方法
在Point2类中添加三个方法,它们是为横坐标x赋值的方法,为纵坐标赋值的方法和显示两坐标的方法。
首先,需要在类中声明,代码如下所示:
- @interface Point2 : NSObject
- {
- int x;
- int y;
- }
- -(void)setX:(int)x1;
- -(void)setY:(int)y1;
- -(void)show;
- @end
然后,在Day01工程中找到Point2.m文件中实现方法。
代码如下所示:
- #import "Point2.h"
- @implementation Point2
- -(void)setX:(int)x1
- {
- x = x1;
- }
- -(void)setY:(int)y1
- {
- y = y1;
- }
- -(void)show
- {
- NSLog(@"x=%d,y=%d", x, y);
- }
- @end
步骤四:在主程序中使用Point2类
首先在Day01工程中新添加Point2Main.m文件,用于存储主程序,在主程序中定义两个Point2类的对象,然后将两个对象的横坐标和纵坐标赋值,最后打印这两个对象。
- #import "Point2.h"
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- // insert code here...
- Point2 *p = [[Point2 alloc] init];
- [p setX:10];
- [p setY:20];
- [p show];
- Point2 *p1 = [[Point2 alloc] init];
- [p1 setX:55];
- [p1 setY:77];
- [p1 show];
- }
- return 0;
- }
2.3 完整代码
本案例中,类Point2声明,即Point2.h文件,完整代码如下所示:
- @interface Point2 : NSObject
- {
- int x;
- int y;
- }
- -(void)setX:(int)x1;
- -(void)setY:(int)y1;
- -(void)show;
- @end
类Point2实现,即Point2.m文件,完整代码如下所示:
- @implementation Point2
- -(void)setX:(int)x1
- {
- x = x1;
- }
- -(void)setY:(int)y1
- {
- y = y1;
- }
- -(void)show
- {
- NSLog(@"x=%d,y=%d", x, y);
- }
- @end
主程序,即Point2Main.m,完整代码如下所示:
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- // insert code here...
- Point2 *p = [[Point2 alloc] init];
- [p setX:10];
- [p setY:20];
- [p show];
- Point2 *p1 = [[Point2 alloc] init];
- [p1 setX:55];
- [p1 setY:77];
- [p1 show];
- }
- return 0;
- }
3 编写Student类
3.1 问题
定义一个Student类,在类中包含以下实例变量int age、char gender、double salary信息,定义一个方法printInfo输出所有实例变量的值,在主函数中对Student类的对象进行赋值并输出。
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义类Student
首先在Day01工程中添加Student.h文件,用于定义类Student。
代码如下所示:
- @interface Student : NSObject
- {
- }
- @end
步骤二:定义实例变量
在类Student的声明中添加以下实例变量。
变量age用于存储某学生的年龄。
变量gender用于存储某学生的性别。
变量salary用于存储某学生的津贴。
代码如下所示:
- @interface Student : NSObject
- {
- int age;
- char gender;
- double salary;
- }
- @end
步骤三:定义方法
首先,在类Student的声明中添加以下方法的声明。
代码如下所示:
- @interface Student : NSObject
- {
- int age;
- char gender;
- double salary;
- }
- -(void)setAge:(int)age1;
- -(void)setGender:(char)gender1;
- -(void)setSalary:(double)salary1;
- -(void)printInfo;
- @end
上述代码中,以下代码:
- -(void)setAge:(int)age1;
用于对实例变量age进行赋值。
上述代码中,以下代码:
- -(void)setGender:(char)gender1;
用于对实例变量gender进行赋值。
上述代码中,以下代码:
- -(void)setSalary:(double)salary1;
用于对实例变量salary进行赋值。
上述代码中,以下代码:
- -(void)printInfo;
用于将类中的三个实例变量的值输出。
然后,在类Student的实现部分,将类中声明的方法进行实现。类Student的实现部分存放于Day01工程新添加的Student.m文件中。
代码如下所示:
- #import "Student.h"
- @implementation Student
- -(void)setAge:(int)age1
- {
- age = age1;
- }
- -(void)setGender:(char)gender1
- {
- gender = gender1;
- }
- -(void)setSalary:(double)salary1
- {
- salary = salary1;
- }
- -(void)printInfo
- {
- NSLog(@"age=%d", age);
- NSLog(@"gender=%c", gender);
- NSLog(@"salary=%lf", salary);
- }
- @end
步骤四:在主程序中使用Student类
在Day01工程中新添加StudentMain.m文件,用于存储主程序。在该文件中定义Student类的对象,然后将对象的三个实例变量赋值,最后打印这个对象。
代码如下所示:
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- // insert code here...
- Student *stu = [[Student alloc] init];
- [stu setAge:25];
- [stu setGender:'M'];
- [stu setSalary:5000];
- [stu printInfo];
- }
- return 0;
- }
3.3 完整代码
本案例中,类Student声明,即Student.h文件,完整代码如下所示:
- @interface Student : NSObject
- {
- int age;
- char gender;
- double salary;
- }
- -(void)setAge:(int)age1;
- -(void)setGender:(char)gender1;
- -(void)setSalary:(double)salary1;
- -(void)printInfo;
- @end
类Student实现,即Student.m文件,完整代码如下所示:
- #import "Student.h"
- @implementation Student
- -(void)setAge:(int)age1
- {
- age = age1;
- }
- -(void)setGender:(char)gender1
- {
- gender = gender1;
- }
- -(void)setSalary:(double)salary1
- {
- salary = salary1;
- }
- -(void)printInfo
- {
- NSLog(@"age=%d", age);
- NSLog(@"gender=%c", gender);
- NSLog(@"salary=%lf", salary);
- }
- @end
主程序,即StudentMain.m,完整代码如下所示:
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- // insert code here...
- Student *stu = [[Student alloc] init];
- [stu setAge:25];
- [stu setGender:'M'];
- [stu setSalary:5000];
- [stu printInfo];
- }
- return 0;
- }
4 重构Student
4.1 问题
使用属性的概念重构Student类,在类中包含以下实例变量int age、char gender、double salary信息,定义一个方法printInfo输出所有实例变量的值,在主函数中对Student类的对象进行赋值并输出。
4.2 方案
属性的概念就是使用@property自动生成实例变量的setter函数和getter函数,使用属性概念可以使类的编写简化。另外,属性还允许在类外使用点运算符来直接访问实例变量,这样也使得对类的对象中实例变量的访问操作得到简化。
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义类Student
由于是对Student类的重构,所以在Day01工程中新添加Student1.h文件用于定义新的类Student。
代码如下所示:
- @interface Student : NSObject
- {
- }
- @end
步骤二:定义实例变量
在类Student的声明中添加以下实例变量。
变量age用于存储某学生的年龄。
变量gender用于存储某学生的性别。
变量salary用于存储某学生的津贴。
代码如下所示:
- @interface Student : NSObject
- {
- int age;
- char gender;
- double salary;
- }
- @end
步骤三:定义属性和方法
首先,在类Student的声明中添加以下属性和方法的声明。
代码如下所示:
- @interface Student : NSObject
- {
- int age;
- char gender;
- double salary;
- }
- @property int age;
- @property char gender;
- @property double salary;
- -(void)printInfo;
- @end
上述代码中,以下代码:
- @property int age;
- @property char gender;
- @property double salary;
是对类中三个实例变量分别添加的三个属性。以上三行代码将在编译时自动转换成三个setter函数和三个getter函数的声明。
上述代码中,以下代码:
- -(void)printInfo;
用于将类中的三个实例变量的值输出。
然后,在类Student的实现部分,将类中声明的属性和方法进行实现。类Student的实现部分存放于Day01工程新添加的Student1.m文件中。
代码如下所示:
- #import "Student1.h"
- @implementation Student
- @synthesize age, gender, salary;
- -(void)printInfo
- {
- NSLog(@"age=%d", age);
- NSLog(@"gender=%c", gender);
- NSLog(@"salary=%lf", salary);
- }
- @end
上述代码中,以下代码:
- @synthesize age, gender, salary;
用于将类中的三个属性进行实现。将在编译时自动转换成三个setter函数和三个getter函数的函数体。
步骤四:在主程序中使用Student类
在Day01工程中新添加StudentMain1.m文件,用于存储主程序。在该文件中定义Student类的对象,然后将对象的三个实例变量赋值,最后打印这个对象。
代码如下所示:
- #import "Student1.h"
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- // insert code here...
- Student *stu = [[Student alloc] init];
- stu.Age = 25;
- stu.Gender = 'M';
- stu.Salary = 5000;
- [stu printInfo];
- }
- return 0;
- }
上述代码中,以下代码:
- stu.Age = 25;
是使用属性的点运算符在类外访问类的实例变量,该语句在编译时会被自动转换成以下代码:
- [stu setAge:25];
4.4 完整代码
本案例中,类Student声明,即Student1.h文件,完整代码如下所示:
- @interface Student : NSObject
- {
- int age;
- char gender;
- double salary;
- }
- @property int age;
- @property char gender;
- @property double salary;
- -(void)printInfo;
- @end
类Student实现,即Student.m文件,完整代码如下所示:
- #import "Student1.h"
- @implementation Student
- @synthesize age, gender, salary;
- -(void)printInfo
- {
- NSLog(@"age=%d", age);
- NSLog(@"gender=%c", gender);
- NSLog(@"salary=%lf", salary);
- }
- @end
主程序,即StudentMain.m,完整代码如下所示:
- #import "Student1.h"
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- // insert code here...
- Student *stu = [[Student alloc] init];
- stu.Age = 25;
- stu.Gender = 'M';
- stu.Salary = 5000;
- [stu printInfo];
- }
- return 0;
- }
Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量的更多相关文章
- java语言基础(四)_面向对象_类_对象_封装_构造
面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...
- 简单介绍Javascript匿名函数和面向对象编程
忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...
- Go语言学习笔记(3)——面向对象编程
把存货赶紧更新一波(捂脸) 1. 类型系统 类型系统,就是说一种编程语言怎么设计的它的类型的体系结构. 比如基础类型啊,复合类型啊,一些可以指向任意对象的类型啊,以及类型的语义,面向对象的特性,接口, ...
- R语言基于S4的面向对象编程
前言 本文接上一篇文章 R语言基于S3的面向对象编程,本文继续介绍R语言基于S4的面向对象编程. S4对象系统具有明显的结构化特征,更适合面向对象的程序设计.Bioconductor社区,以S4对象系 ...
- Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象
15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...
- (转)Objective-C语言--属性和实例变量
本文转自http://blog.csdn.net/addychen/article/details/39525681 使用Objective-C一段时间了,一直没有弄清楚在Objective-C中属性 ...
- ndk学习之c++语言基础复习----面向对象编程
关于面向对象编程对于一个java程序员那是再熟悉不过了,不过对于C++而言相对java还是有很多不同点的,所以全面复习一下. 类 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程 ...
- IOS 其它语言比较-Objc与JAVA的比较
1. Objc是一门编译型语言,JAVA是解析型语言 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运行这个程序. 编译型语言,执行速度快.效率高:依赖编译器.跨平台性差些. ...
- R语言实战读书笔记1—语言介绍
第一章 语言介绍 1.1 典型的数据分析步骤 1.2 获取帮助 help.start() help("which") help.search("which") ...
随机推荐
- 你需要知道的三个 CSS3技巧(转)
1. 在CSS中用attr()显示HTML属性值 attr()功能早在CSS 2.1标准中就已经出现,但现在才开始普遍流行.它提供了一个巧妙的方法在CSS中使用HTML标签上的属性,在很多情况下都能帮 ...
- java面试---summay
1:合适的建立索引,数据量比较大的时候,如果频繁的进行修改插入则不建议建立索引! 2:什么时候适合建索引,在什么字段上面建立索引? (被当做查询条件的) 3:什么叫做编译错误,什么叫做运行时异常 能被 ...
- Axis2 webservice入门--开发环境搭建,概念理解
关于webservice的概念,网上有各种解释,但是不太好懂. 可以这样理解:1.一个webservice就是一个“功能”,只是这个功能是别人写好的,被放在别人的网站上. ...
- linux 常用命令;
bc 计算器 :quit 退出 top 任务管理器 q退出 who 显示在线用户 whoami 当前操作用户 kill id 结束当前进程 ifconfig 显示当前网络状态 clear 清屏 vim ...
- Activity界面切换动画特效。
效果图: 结构图: 测试代码: 布局: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearL ...
- COleDateTime类型的应用
使用COleDateTime类1) 获取当前时间. CTime time; time = CTime::GetCurrentTime();2) 获取时间元素. int y ...
- POJ 1741 树上的点分治
题目大意: 找到树上点对间距离不大于K的点对数 这是一道简单的练习点分治的题,注意的是为了防止点分治时出现最后分治出来一颗子树为一条直线,所以用递归的方法求出最合适的root点 #include &l ...
- Linux的三种特殊权限
1.Suid Set位权限 ●对文件以文件的拥有者身份执行文件 ●对目录无影响 权限设置: ●suid=u+s 2.Sgid Set位权限 ●对文件以文件的组身份执行文件 ●对目录在目录中最新创建的文 ...
- jQuery 通用表单方法
表单验证一直是一个麻烦的事情,让很多人望而退步,之前想过一个验证的好方法,但是有bug,昨晚请教了juyling.com的王员外,顺利解决. 以下是js代码 function mySubmit ...
- 使用SharedPreferences进行数据存储
使用SharedPreferences进行数据存储 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是w ...