注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梦幻雪冰

技在手,能在身,思在脑,从容过生活——陈能堡

 
 
 

日志

 
 

【转载】IOS OC第一课 认识对象以及类  

2014-11-16 11:37:17|  分类: iOS专题 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

IOS OC第一课 认识对象以及类

昨天听了IOS的第一节课程,由于咱是讲师,所以,必然要给大家分享啊~稍加加工之后,从咱HTML5的角度讲讲,来辅助大家学习这个东西。自己也是现学现买,所以,希望各位能够多提宝贵意见~~~
很能够感觉到的一点就是,在懂得一门语言之后,只要找到一个很不错的学习流程/方法,就能够快速掌握一门新的语言(计算机),知识之间的联系很重要。

今天我们主要讲解如下内容:
1、在IOS学习中的主要内容和流程
2、面向对象的基本概念
3、OC中功能(可以理解为JS中的函数)的基本声明、定义与调用
4、OC中的基本语法
5、便利初始化器

1、在IOS学习中的主要内容
IOS的学习当中,通常会先接触一下C语言,接触C语言的目的,在于培养基本的计算机思维,另外,C语言能够帮助为OC提前积淀一些基础。IOS主要由OC和UI组成,其中OC主要用代码进行数据的处理,而UI其实就是界面,主要用于引导(引导用户去处理数据)
2、面向对象的基本知识
OC是一门面向对象的语言。面向对象的概念可以参见我之前的博文《面向对象系列讲解——认识对象》
3、OC中功能的基本声明、定位、调用
由于OC是一门面向对象的语言,因此,掌握OC的第一步就是先了解它的运行机制。
这时候我们先回忆我们学过的JS,借助JS中的函数去理解。

假设我们需要创建一个对象,这个对象是一个人的基本信息,他拥有了姓名以及年龄的属性,还拥有着说出姓名的方法。
使用JS的方法:
var people = {} // 创建一个对象
people.name = "username"; // 给对象定义属性
people.age = "24";
people.sayName = function(){
console.log(this.name);
}
使用OC:
在OC当中,对象是由“声明、定义、调用”所组成的,使用OC创建对象并进行调用的基本步骤:
1)创建文件
2)在.h文件中进行对象(属性和方法)的声明
3)在.m文件中进行对象(属性和方法)的定义
4)在功能文件当中进行对象的调用
5)处理初始化数据

3.1 文件的创建
1)使用软件,新建一个文件,选择创建的类文件cocos2Class/ObectCClass
2)输入类的名字,起名为People,subClass的类型选择:nsobject
3)此时,系统会自动创建People.h与People.m文件的创建。People.h的文件中用于进行

3.2 在People.h文件中声明对象:(前提是创建People.h与People.m的文件)
#import <Foundation/Foundation.h>
@interface People: NSObject {
NSString * username;
int age;
}
-(void) sayHelloEveryoneName:(NSString *)myName andAge:(int)myAge;
@end
关于上面代码的理解方法:
1、#import和C语言中的#include、JS文件中的link引入功能类似,用于导入这个类的头文件,同时,import可以保证头文件仅仅导入一次(OC的文件引用使用<>或者"")
2、interface表示接口,用于向外界声明,这个类(对象)的基本特征(属性)与行为(方法),类的名称就是People
3、void表示函数的返回值类型,和C语言类似
4、完整的函数名是sayHelloEveryoneName andAge这个名字是可以自定的
5、myName myAge表示的是函数的参数
6、(NSString *)表示的是参数/属性的类型
7、类中行为的声明规范 必须采用小驼峰命名法

3.3 在People.m文件中定义对象的方法:

#import "People.h"
@implementation People
-(void) sayHelloEveryoneName:(NSString *)myName andAge:(int)myAge {
NSLog(@"大家好,我是%@,今年%d岁", myName, myAge);
}
@end

注意:
1、此处是函数的实现,在这个之前,函数/方法是没有任何的功能,具体书写功能。换用JS去理解,比较类似于混合模式的书写,第一步声明函数以及自定义属性,第二步在函数的外部挂载原型方法,第三步进行函数的调用
2、%@是为对象提供的控制符,格式化输出对象,所有的对象都可以用%@打印,姓名不确定是采用%c还是%d,此时可以采用%@

3.4 调用对象的方法(在main.m文件当中-类似于C语言中的主函数main)

#import <Foundation/Foundation.h>
#import "People.h"
int main(int argc, const char * argv[]){
@autoreleasepool {
People * peo_one = [[People alloc] init];
[peo_one sayHelloToEveryoneName:@"利利" andAge:24];
}
return 0;
}

注意:
1)函数的定义很类似于C语言,采用:
数据类型 函数名(参数){功能},@autoreleasepool是一个固定模式需要书写
2)alloc表示开辟内存空间,init表示初始化,此处等号后面即为:以People这个类去开辟一个内存空间,并且初始化。有点类似于JS中构造函数实例化-new的过程
3)在JS当中,我们使用()进行函数的调用,而在()中书写函数的参数,如:sayHello("独行冰海", 24),而在OC中必须使用中括号的方式进行方法的调用,参数也是放置于中括号当中

最后注意-important:OC中的基本步骤是对象的定义以及属性设置——>对象的方法定义——>对象的实例化。在上面的例子当中,我们将这三步分别放置在了People.h文件、People.m文件以及main.m文件当中,在实际开发中,其放置的位置并不是固定的,后面的博文中我们会具体提到。这里的方式方法比较便于理解,因此分置了三个文件进行存放。


对象的便利初始化器
例如,创建了一个人的方法,这个时候,在调用之后,一个新的人虽然有了一系列定义的属性,但是都没有具体定义(即不确定年龄、姓名等)。所谓便利初始化器就是在调用的时候(实例化)直接定义属性值,JS中也是如此,在进行属性定义的时候,是可以进行初始化的。
第一步,调整的基本方法

-(void) sayHelloEveryoneName:(NSString *)myName andAge:(int)myAge;
修改为:
-(People *)initwidthName:(NSString *)newName andAge:(int)newAge;
// OC中 只要出现了*(函数声明中的char *等除外)。就是实例,如:Student *表示Student是一个实例 类似于JS中的new

第二步,调整定义的内容(People.m文件中新增如下代码)

-(People *)initWidthName:(NSString *)newName andAge:(int)newAge {
if(self = [super init]){
// super init表示的是其祖先,此处的super表示的就是Student的父类或祖级,也就是让其父级(所依靠的)先初始化
// self指的是这个类的实例化对象 self只能使用在这个类的实现位置
name = newName;
age = newAge;
}
return self;
}

OC中为了能够通过参数进行初始化,设置了这种方式,在这个代码中,self=[super init],必须出现,目的在于如果希望当前People有功能,要求它的父级需要先创建,换句话说,就是先有了父亲,再有儿子,之后,在if语句当中也是这段代码的核心部分,即将传入的参数赋值给实例化对象的属性。
第三步,修改init中的实例化的方法

People * peo_one = [[People alloc] init];
修改为
People * peo_one = [[People alloc] initWidthName:@"独行冰海" andAge:24];

便利初始化器,目的是指定实例对象部分特定的属性/特征,以方便我们的操作
欢迎沟通交流~独行冰海
  评论这张
 
阅读(31)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017