objective-C 初识
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
#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
#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 ;
}
@property
和
@synthesize
来自动的生成set和get方
法
//和.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;
//为自动生成的属性方法赋值 类似于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);
//自定义的初始化方法
-(Student *)initWithName:(NSString *)newName andAge:(int)newAge andAddress:(NSString *)newAddress;
//-代表的是实例化的方法,用对象去调用
//返回类型为 Student *
//方法名字为initWithName:andAge:andAddress:
//参数有:newName,newAge,newAddres
//自定义的初始化的方法的实现
-(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;//返回实例好的对象
}
//使用自定义的初始化方法
Student *stu1=[[Studentalloc]initWithName:@"张文文" andAge: andAddress:@"滨州职业学院"];//[Student alloc]:"根据类的模板Student申请相应的内存,alloc为申请内存关键字
[stu1 sayHi];//调用方法
七、OC中的便利构造器
为了解决自定义初始化方法中在测试方法中分配内存的困扰,OC提供的构造器。通过类名调用该构造器来实现类的实例化
//便利构造器 集成了对象实例化的内存分配和赋值简化了对象的实例化
//定义格式:
+(Student *)studentWithName:(NSString *)newName andSex:(BOOL)newSex andAge:(int)newAge andAddress:(NSString *)newAddress;
//为静态方法 通过类来调用
//构造器的实现
+(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;
}
//便利构造器的使用
Student *stu2=[Student studentWithName:@"李四灿" andSex:YES andAge: andAddress:@"淄博职业学院"];
[stu2 sayHi];
类的定义
实例变量(作用域)
方法的定义
set和get方法
属性
自定义初始化方法
便利构造器
objective-C 初识的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
随机推荐
- Qt的目录依赖问题----怎样生成一个绿色的Qt软件包
Qt的目录依赖问题----怎样生成一个绿色的Qt软件包 一.核心问题: 如果将编译好的Qt文件拷贝到任何目录下,作为一个绿色软件库来使用? 二.原理讨论 由于Qt在编译的时候将安装路径硬编码到了库文件 ...
- Libev学习笔记4
这一节首先分析Libev的定时器部分,然后分析signal部分. 对定时器的使用主要有两个函数: ev_timer_init (&timeout_watcher, timeout_cb, .) ...
- hdoj 1251 统计难题(字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 思路分析:该问题要求求出以某个字符串为前缀的单词数目,通过使用字典树,在字典树中添加count记 ...
- hdu 4738 (双联通求桥)
2013 ACM/ICPC Asia Regional Hangzhou Online 题目大意:有n个岛,曹操在一些岛之间建了一些桥,每个桥上有一些士兵把守,周瑜只有一个炸弹只能炸掉一个桥,炸弹需要 ...
- [置顶] 【J2SE 】1136 容器之旅
开篇引言 本篇文章我将要详细的介绍一下什么是容器?以及什么是1136?来系统全面的了解容器,以及容器的应用,下面就进入我们的容器之旅吧! 1.什么是容器? 用来存储和组织其他对象的对象.我们也可以这样 ...
- hpu校赛--雪人的高度(离散化线段树)
1721: 感恩节KK专场——雪人的高度 时间限制: 1 Sec 内存限制: 128 MB 提交: 81 解决: 35 [提交][状态][讨论版] 题目描述 大雪过后,KK决定在春秋大道的某些区间 ...
- Linux-中断和中断处理
1.中断 #中断使得硬件得以发出通知给处理器,本质上是一种电信号 #中断随时能够产生.内核随时会被打断 #不同设备的中断不同,每一个中断都通过一个唯一的数字标识.称为IRQ(中断请求) 2.中断处理程 ...
- 没有login页面
"/"应用程序中的服务器错误. 无法找到资源. 说明:HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保 ...
- HTML5 总结-拖放-3
HTML5 拖放 拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放 ...
- ThinkPHP第三天(公共函数Common加载,dump定义,模板文件,定义替换__PUBLIC__)
1.公共函数定义 自动加载:在项目的common文件夹中定义,公共函数文件命名规则为common.php,只有命名成common.php才能被自动载入. 动态加载:可以修改配置项‘LOAD_EXT_F ...