Person.h

 #import <Foundation/Foundation.h>

 @interface Person : NSObject
{
//在{}中定义属性(全局变量/实例变量)
//注意:只能定义不能赋值,因为这里只是在做声明操作,不能赋值的
//加上下划线,为了区分局部变量
NSString *_name;//姓名,默认值是nil:空指针,可以查看定义:#define nil NULL
NSInteger _age;//年龄,默认值是0
} //定义方法
//-:实例方法,+:类方法
//格式:方法说明 (返回类型) 方法名 : (参数类型)参数名称
//注意方法名是shopping:,不是shopping,这个要注意
- (void)shopping:(float)price; //定义方法设置属性值(注意setXXX)
- (void)setName:(NSString *)name;
- (void)setAge:(NSInteger)age; //定义方法的获取属性值(注意不是getXXX,而是直接的属性名,因为getXXX在OC中还有其他用途)
- (NSString *)name;
- (NSInteger)age; //多个参数的方法定义
//方法名两部分组成的:setName: setAge:
- (void)setName:(NSString *)name setAge:(NSInteger)age;
//或者方法名:setName: :,后面的可以省略,但是这种方式不建议使用
//- (void)setName:(NSString *)name :(NSInteger)age; //类方法
//在这个方法中是无法访问属性的,因为属性是属于对象的,不是类的
+ (Person *)newPerson;
@end /*
一般类的定义格式为: @interface 类名:NSObject{ 定义属性 }
定义方法(method) 这里有几点需要说明: 1、OC中任何一个类都是继承NSObject,这个和Java中的Object是一个概念的,所以这里需要导入 #import <Foundation/Foundation.h> 其实Java中的Object对象是在java.lang.*包中的,不过Java并不会导入这个包,因为Object类的类加载器决定的,不需要导入的. 2、这里的继承符号和C++中是一样的,使用冒号: 3、在{}类定义类的属性,关于这里所说的属性和Java中的属性不是一个概念了,OC中只要定义在{}中的字段就是类的属性,而Java中是有getXXX/setXXX的方法,才叫属性。
同时也得注意,OC中类中定义的属性名是以下划线:"_"开头,为什么要这样做,就是为了区分后面的局部变量与其重名了,当然我们在Java中一般是以m开头,
或者其他方式,Java中没有那么强的规范,但是OC中还是强烈建议用这种方式的,还有一点要注意,在定义设置方法的时候,一般样式是setXXX,
但是在定义取值的方法的时候直接是XXX,而不是getXXX了,这个也是和Java有区别的,至于为什么这么做,因为get开头的方法已经有其他用处了,
后面会说到。这里就注意一下就可以了。 4、在属性定义的后面就是简单的定义方法了 下面在来看一下如何定义方法: OC中定义方法和Java语言有很大的不同,所以这里很难记住,如果不常用的话,看一下方法的定义格式: 方法说明 (返回类型) 方法名 : (参数类型)参数名称 1、方法说明有两种: 一种是减号:"-",表示该方法是对象方法,就是必须用对象实例才能调用的 一种是加号:"+",表示该方法是类方法,就是可以用类直接调用的,不需要实例化对象的,类似于Java中的static方法 2、返回类型:这个就简单了,和Java语言很类似了 3、方法名:方法名和Java中就不太一样了,看个例子: //注意方法名是shopping:,不是shopping,这个要注意
- (void)shopping:(float)price; 这个方法的方法名是 shopping: 是包含冒号的,再看个例子: //多个参数的方法定义
//方法名两部分组成的:setName: setAge:
- (void)setName:(NSString *)name setAge:(NSInteger)age; 多参数的方法定义,那么这个方法的方法名就是setName:setAge: 4、(参数类型)参数名称:这个和Java也是有很大的区别的,感觉像是和Java中定义的相反了,他用括号把类型括起来了。OC中的对象类型和Java中的使用不一样,
OC中的对象类型相当于C中指针定义样式(类名 *),这点需要注意。 当然在类定义的结束地方使用@end关键字的
*/v

Person.m

 #import "Person.h"

 @implementation Person

 //实现方法
- (void) shopping : (float)price{
NSLog(@"%@ shopping %f",_name,price);
} - (void)setName:(NSString *)name{
_name = name;
}
- (void)setAge:(NSInteger)age{
_age = age;
}
- (NSString *)name{
return _name;
}
- (NSInteger)age{
return _age;
}
- (void)setName:(NSString *)name setAge:(NSInteger)age{
_name = name;
_age = age;
}
+ (Person *)newPerson{
return [[Person alloc] init];
} @end /*
看到类的实现使用的是@implementation 关键字 在实现的源文件中,必须导入类的定义的头文件 #import "Person.h"
这样的一种形式,和C语言中的工程结构非常相似。 然后就是对头文件中定义的一些方法的具体实现了,而且在实现文件中,我们可以访问类中定义的属性。 其他的就没有什么难度了,就不在细说了,同样的类的结束标志:@end
*/

main.m

 //类的定义放在.h文件中
//类的实现放在.m文件中 //定义一个类的步骤
//定义类名、编写类的属性、编写类的行为 #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建对象
//在内存中申请一块内存区域
//Person *person = [Person alloc];
//调用初始化方法,初始化一些默认数据
//可能上面申请的内存之前有被使用过,还会有以前的数据。所以我们需要将其数据清空,这时候就会将默认值进行赋值(相当于清空操作)
//person = [person init]; //合并
//这里申请了两块内存:一个是对象指针变量,一个是alloc申请的
//可以看出alloc/init方法是类方法、可以查看NSObject对象的定义
Person *person = [[Person alloc] init]; //还有另外的一种方式创建一个对象,但是这种方式不建议使用,因为这种方式相当于把上面的两个合并
//有时候我们需要将上面的两个步骤进行分开操作的
//Person *person1 = [Person new]; //设置名字
[person setName:@"jaingwei"]; //调用实例方法shopping
[person shopping:]; Person *person1 = [[Person alloc] init];
[person1 setName:@"huangdaoyang"];
[person1 shopping:];
//同时设置两个属性的值,但是这种方式不建议使用,建议使用set方法
[person1 setName:@"huangdaoyang" setAge:]; //get方法调用
NSString *person_name = [person name];
NSLog(@"name is %@",person_name);
NSString *person1_name = [person1 name];
NSLog(@"name is %@",person1_name); //类方法调用
Person *person2 = [Person newPerson];
[person2 setName:@"shixin" setAge:];
[person2 shopping:]; //空指针
Person *person3 = nil;
//不执行任何操作,但是也不会报错空指针异常
[person3 setName:@"空对象" setAge:]; }
return ;
}
/*
OC中实例化一个对象的方式是:
Person *person = [[Person alloc] init]; 首先是指针类型的样式定义一个变量,然后是调用类的alloc方法,接着调用init方法,这里有点比较奇怪,我们在定义Person类的时候,没有定义alloc和init方法, 这里为什么不报错呢?这个就和Java很相似了,因为OC中任何类都是集成NSObject类的,那么自然想到了这两个方法是NSObject定义的。 而且我们可以看到alloc方法是类方法,init是对象方法 同时,OC中的方法调用方式: 对象方法:[对象变量 方法名 参数] 类方法:[类名 方法名 参数] 这里实例化一个对象和Java中有很大的区别的,Java中直接new一个就可以了。这里需要调用两个方法alloc和init 可以这么理解吧:alloc相当于给这个对象分配内存空间,init是调用这个类的构造方法,对属性和字段进行初始化操作 当然上面的实例化操作也可以变成两步:
Person *person = [Person alloc];
//调用初始化方法,初始化一些默认数据
//可能上面申请的内存之前有被使用过,还会有以前的数据。所以我们需要将其数据清空,这时候就会将默认值进行赋值(相当于清空操作)
person = [person init];
但是OC中建议的方式还是上面那种。 对象方法的调用,设置名字:
//设置名字
[person setName:@"guojianhao"]; 多个参数的对象方法调用,同时设置名字和年龄
//同时设置两个属性的值,但是这种方式不建议使用,建议使用set方法
[person1 setName:@"huangdaoyang" setAge:22]; 类方法的调用:
//类方法调用
Person *person2 = [Person newPerson]; 总结 好了,关于OC中类的定义以及实现,如何使用就介绍到这里了,我们在学习的过程中可以和一门面向对象语言相比较学习,这样可能会学习的快点。
*/

iOS 开发学习-类的创建与实现,与java语言的对比的更多相关文章

  1. iOS开发UI篇—CAlayer(创建图层)

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

  2. ios开发 学习积累20161027~20161031

    前言 学习ios这几天来,总结下,函数的定义,调用.跟其他语言都有一定的区别: 几个特别重要的就是对象的迭代的使用和判断.取随机数.动画的实现及数组的深入研究等等 之前的总结地址 ios开发 学习积累 ...

  3. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  4. iOS开发学习 阶段过程简述

    下面就简单介绍一下我iOS开发的感受,也是学习iOS开发的一个体系架构. 1 iOS开发环境 1.1 开发环境 标准的配置是Mac OS X + Xcode. MacOSX的话首选用苹果电脑,macm ...

  5. iOS开发学习概述及知识整理

    设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用 ...

  6. iOS开发学习路线图

    很多初学iOS开发的人会经常问:“我想学iOS应该从何入手呢?”.作为一个做了2年多各种iOS开发的程序员,只想写写自己的一些心得体会,好和体验与不好的体验.写的不好,请多包涵.希望能起到抛砖引玉的作 ...

  7. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

  8. ios开发 学习积累20161024~20161026

    打算转ios开发工程师的岗位 今天看了下视频,自己吭呲吭呲几下开始写UI 先把Xcode8 的界面总结下 navigator ['nævɪɡetɚ] 导航器.浏览器 symbol navigator  ...

  9. ios开发之OC基础-ios开发学习路线图

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

随机推荐

  1. 通过条件注解@Conditional细粒度的选择bean实例

    在进行spring进行开发时,当某个接口有多种实现方式并且我们只想让一种生效时,比如声明如下一个接口和两个实现: public interface LanggageService { String s ...

  2. pH计

    pH计 测量原理 pH计主要用于测量液体中的氢离子浓度.准确地说是测量氢离子活性,得出酸性.中性还是碱性的数值,在自来水.河水.饮料.食品.污水.医疗和化工等领域广泛地使用工业用液体分析仪. pH计原 ...

  3. 【VSC】我安装了哪些扩展插件

    Nodejs gitk  ——  版本实时比对 Debugger for Chrome ——  让 vscode 映射 chrome 的 debug功能,静态页面都可以用 vscode 来打断点调试. ...

  4. springboot集成elk实现分布式日志管理

    1.安装elk https://www.cnblogs.com/xuaa/p/10769759.html 2.idea创建springboot项目 File -> New -> Proje ...

  5. DBlink的创建与删除

    创建方式一: create [public] database link link名称 connect to 对方数据库用户identified by 对方数据库用户密码 using  '对方数据库i ...

  6. Oracle ora-12514监听程序当前无法识别连接描述中请求的错误

    昨天刚安装好oracle数据库,还可以登录,到今天,登录时就发出了这样的错误 到网上找了半天,上面都是说监听器服务的问题,但是试过后依旧不行.最后重启了一次,就解决了异常 原来是oracle中一个服务 ...

  7. iOS 11 使用方法替换(Method Swizzling),去掉导航栏返回按钮的文字

    方法一:设置BarButtonItem的文本样式为透明颜色,代码如下: [[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegro ...

  8. Linux-2.6驱动程序分层分离概念

    下面以一个按键的实验作为驱动分离时间简单学习: #include <linux/module.h> #include <linux/version.h> #include &l ...

  9. JavaWeb基础—Http协议

    一.什么是Http协议 超文本传输协议的简称,用于定义客户端与web服务器通迅的格式. 关于[标准的HTTP协议是无状态的],请参见:http://www.cnblogs.com/bellkosmos ...

  10. UWP Read write File -StorageFile

    // private void MainPage_Loaded(object sender, RoutedEventArgs e) { GetFileAsync(); } public async v ...