objective-C

objective-c 是c语言的改进版

一、方法的定义:

格式:

-/+(返回值类型)方法名:(参数类型) 参数名 [方法名] : (参数类型) 参数名.........

例如:-(int)max:(int) a andB : (int)b

是说,定义了一个名为maxandB 的普通方法,其返回值为int,参数为a , b

其中:-/+:-表示定义的是个普通方法;+表示定义的是个静态方法

二、属性的定义:

格式:属性类型  属性名(字符串属性名前面要加上*)

例如:

NSString *name;//字符串类型变量的定义

int age;

BOOL sex;//bollen类型的变量定义

其中  NSString表示字符串类型;BOOL表示布尔类型(取值为YES/NO)

相关关键字的简介:

#import:用于导入类库

@interface:定义类的公共接口 ,生成.h文件

@implementation:实现类中的方法,生成.m文件

注意:类为模板,不占用内存

三、一个简单的OC程序

#import <Foundation/Foundation.h>//<>导入系统的类

int main(int argc, const char * argv[])

{

//基本类型的定义与c无异

int n;//定义整型变量

BOOL b;//定义布尔类型的变量

//引用型变量的定义要在变量名前加*  相当于c中的指针

NSString *ns;//定义字符串类型的变量

n=;//基本类型变量的赋值

b=YES;//布尔类型变量的赋值

ns=@"我的第一个OC程序";//引用型类型的赋值在要赋值的对象前加“@”号

NSLog(@"n的值为%d,b的值为:%d,ns的值为:%@",n,b,ns);//NSLog为输出函数,其输出形式和C基本上没区别。只是要在输出字符串前加“@”号

NSLog(@"到此结束");

return 0;

}

四、类的创建和使用  以定义一个Student类为例

1、在新建的项目文件上右击选择 NEW FILE ,然后在os x 下选择Cocoa 新建Objective-C class,然后next,输入类名Student,然后next,creat

2、创建完后会在项目下自动生成 .h和.m两个文件,其中.h文件定义了类的公共属性和方法,相当于java中得接口,.m文件则实现.文件中定义的方法,相当于java中实现其接口

3、在.h文件中定义类的公共的方法和属性

#import <Foundation/Foundation.h>

@interface Student : NSObject //继承自NSObject

{//成员(实例变量)变量区域(描述的类的特征)

@public  //属性的范围定义----5个全为public

NSString *name;//字符串类型变量的定义

int age;

BOOL sex;//bollen类型的变量定义

NSString *hobby;

NSString *address;

}

//声明方法的区域

//成员变量的访问器(set和get)其中get方法名和变量名一致,不带get字样

//普通变量的set和get方法的定义

-(void)setAge:(int)newAge;

-(int)age;

//字符串型即object型方法的定义  一定要在变量类型后面加* 表示指针

-(void)setName:(NSString *)newName;

-(NSString *)name;

-(void)sayHi;//无参数的话方法类型+方法名直接以分号结束不带有小括号

+(void)study;

//-代表的是普通的方法,用实例对象调用

//+代表的是静态的方法,用类名调用

@end

4、.m文件中的实现

#import "Student.h"//导入头文件  即类库

@implementation Student//实现student接口

//实现get和set方法

//普通属性set和get方法的实现

-(void)setAge:(int)newAge

{

if(newAge>&&newAge<)

{

age=newAge;

}else

{

age=;

}

}

-(int)age

{

return age;

}

//字符串类型即object类型set和get方法的实现

-(void)setName:(NSString *)newName

{

name=newName;

}

-(NSString *)name

{

return name;

}

-(void)sayHi

{

NSLog(@"我叫%@,来自%@,今年%d岁",name,address,age);//占位符 字符串:%@   int:%d char:%c bool:%d

}

+(void)study

{

//类方法不能调用成员变量

NSLog(@"我正在学习ios开发。");

}

@end

5、main方法中的测试:

#import <Foundation/Foundation.h>//<>导入系统的类

#import "Student.h"//“”导入自定义的类

int main(int argc, const char * argv[])

{

@autoreleasepool {//自动的释放池 可以省略(删除)

// insert code here...

NSLog(@"Hello, World!");

}

//Student.alloc() Java  java中方法的调用  调用alloc方法

//[Student alloc] OC  OC中方法的调用  调用alloc方法

//创建对象的三种方法

//第一种

//    student *stu=[[Student new]];

//第二种 常用

Student *stu=[[Student alloc]init];

//第三种

//    Student *stu=[Student alloc];

//    stu=[stu init];

//调用方法

[stu sayHi];//对象调用普通方法

[Studentstudy];//类调用静态方法

//属性的赋值    编译的快捷键  window+b

stu->name=@"张三";

stu->address=@"滨州学院";

stu->age=;

[stu sayHi];

//调用get和set方法

//set方法的调用

[stu setAge:];//普通类型的方法的调用及赋值

[stu setName:@"王五"];//字符串即object类型的方法的调用和赋值

[stu sayHi];

//get方法的使用

int n=[stu age];//返回值为普通类型的方法的调用

NSString *nn=[stu name];//返回值为object类型的方法的调用及使用

NSLog(@"n=%d,nn=%@",n,nn);

return ;

}

五、在类中为属性定义读写器时比较麻烦,oc提供了一组关键字
@property

@synthesize
来自动的生成set和get方
以Student类中的age属性和name属性为例简单介绍其使用方法
1、@property在.h文件中使用,放在属性定义列表即一对大括号的后面

//和.m文件中得@synthesize配套使用

//基本类型的使用

@property(nonatomic,assign)int age;//@property:当前类的属性  nonatomic:和多线程相关的参数(了解);assign:和内存相关的参数   作用:省去了age属性的set和get方法的定义

//对象类型的使用

@property(nonatomic,retain)NSString *name;

2、synthesize在.m文件中使用,放在@implementation的后面

//和.h中得@property(nonatomic,assign)int age;配套使用

//基本类型的使用

@synthesize age;//省去了age属性set和get方法的实现,自动生成的方法无逻辑判断

//自定义的set和get方法会覆盖原来系统自动生成的方法  优先级高于自动生成的

//对象类型的使用  和基本类型一样,可以写在一行中 @synthesize age,name;

@synthesize name;

3、在main方法中的测试

//为自动生成的属性方法赋值  类似于c#中属性的定义,几乎一样

//set的调用

stu.age=;//<=>[stu setAge:30];

stu.name=@"李四";//<=>[stu setName:@"李四"];

[stu sayHi];

//get的调用

int m=stu.age;//<=>[stu age];

NSString *mm=stu.name;//<=>[stu age];

NSLog(@"m=%d,mm=%@",m,mm);

六、OC中自定义的实例初始化的方法
自定义实例化方法的定义及使用:
1、在.h文件中

//自定义的初始化方法

-(Student *)initWithName:(NSString *)newName andAge:(int)newAge andAddress:(NSString *)newAddress;

//-代表的是实例化的方法,用对象去调用

//返回类型为 Student *

//方法名字为initWithName:andAge:andAddress:

//参数有:newName,newAge,newAddres

2、在.m文件中

//自定义的初始化的方法的实现

-(Student *)initWithName:(NSString *)newName andAge:(int)newAge andAddress:(NSString *)newAddress

{

if(self=[superinit])//self指当前对象  相当于java中的this

{

self->name=newName;

self->age=newAge;

self->address=newAddress;

}

return self;//返回实例好的对象

}

3、在main方法中的测试

//使用自定义的初始化方法

Student *stu1=[[Studentalloc]initWithName:@"张文文" andAge: andAddress:@"滨州职业学院"];//[Student alloc]:"根据类的模板Student申请相应的内存,alloc为申请内存关键字

[stu1 sayHi];//调用方法


七、OC中的便利构造器

为了解决自定义初始化方法中在测试方法中分配内存的困扰,OC提供的构造器。通过类名调用该构造器来实现类的实例化

构造器的定义和使用:
1、在.h文件中

//便利构造器 集成了对象实例化的内存分配和赋值简化了对象的实例化

//定义格式:

+(Student *)studentWithName:(NSString *)newName andSex:(BOOL)newSex andAge:(int)newAge andAddress:(NSString *)newAddress;

//为静态方法  通过类来调用

2、在.m文件中

//构造器的实现

+(Student *)studentWithName:(NSString *)newName andSex:(BOOL)newSex andAge:(int)newAge andAddress:(NSString *)newAddress

{

Student *stu=[[Student alloc]init];//根据类型申请一块内存

stu->name=newName;

stu->sex=newSex;

stu->age=newAge;

stu->address=newAddress;

//与上面的等价

//  Student *stu=[[Student alloc]initWithName:newName andAge:newAge andAddress:newAddress];

return stu;

}

3、在main测试方法中

//便利构造器的使用

Student *stu2=[Student studentWithName:@"李四灿" andSex:YES andAge: andAddress:@"淄博职业学院"];

[stu2 sayHi];


八、总结
第一天

类的定义

实例变量(作用域)

方法的定义

set和get方法

属性

自定义初始化方法

便利构造器

objective-C 初识的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  3. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  4. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  5. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  6. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

  7. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  8. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  9. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  10. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

随机推荐

  1. Hadoop--有关Hadoop的启动

    这里我们已经安装好Hadoop,并且已经配置好了环境变量. 安装相关文章:http://blog.csdn.net/gaopeng0071/article/details/10216303 参考网站: ...

  2. perl5 第一章 概述

    第一章 概述 by flamephoenix 一.Perl是什么?二.Perl在哪里?三.运行四.注释 一.Perl是什么?      Perl是Practical Extraction and Re ...

  3. Node.mongoose

    简介 mongodb是一款面向文档的数据库,不是关系型数据库,新手熟悉mysql.sqlserver等数据库的人可能入手稍微困难些,需要转换一下思想,可以不需要有固定的存储模式,以文档模型为存储内容相 ...

  4. golang实现udp接入服务器

    前端通过udp与接入服务器连接,接入服务器与后端tcp服务器维持tcp连接.目录结构及后端tcp服务器代码同上一篇博客. main.go package main import ( "lot ...

  5. BZOJ 1856: [Scoi2010]字符串( 组合数 )

    求(0,0)->(n,m)且在直线y=x下方(可以在y=x上)的方案数...同 http://www.cnblogs.com/JSZX11556/p/4908648.html --------- ...

  6. MVC+ADO模式

    MVC+DAO设计模式 博客分类: Java Java WEB开发   MVC+DAO设计模式 本文摘自:http://www.paper.edu.cn    基于MVC+DAO设计模式的Struts ...

  7. 设置textarea文本域不能调整大小 resize

    CSS3中新增了resize缩放属性,这个属性可以应用到任意元素.目前只有Webkit内核的浏览器才支持这个css3属性,即Google chrome和Apple safari都支持.而textare ...

  8. QT中的qmake详解

    关于qmake,好一段时间令我一头雾水,不知道用来干嘛的,只知道怎么用,而且也只懂那么一两个命令,详细看过资料以后整理如下: 1.首先,感性的认识是,qmake可以利用源文件(包括头文件h,实现文件c ...

  9. 谈谈Facebook的聊天系统架构

    今天看到一份 Facebook 公司 2009 年的 Slideshow, 介绍它的聊天系统架构, 其中的一张图结构非常清晰, 所以我对这张图谈谈我的看法. Web Tier: 用 PHP 开发, 聊 ...

  10. B-树和B+树的应用:数据搜索和数据库索引

    B-树和B+树的应用:数据搜索和数据库索引  B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每 ...