- 浏览: 1872094 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangyudong:
Wisdom RESTClient工具地址更新了哦https: ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
higkoo:
一个非常棒的系统,要是能支持LDAP等开源认证就完美了。
Cynthia 是个问题管理/BUG管理/任务管理/项目管理系统。 -
寻光之旅:
标签库使用有啥好处呢?
thinkphp 使用标签库的步骤 -
lgdjy123:
Android:TextView属性大全
主机内容
类的申明
函数/消息的定义方法
字段作用域
语法纵览
关键字都有@开始,比如:
@class, @interface, @implementation,@public @private, @protected, @try, @catch, @throw, @finally, @end, @protocol, @selector, @synchronized, @encode, @defs
基本面向过程
比较项目 OC和C语言对比
基本类型 char, short, int, long long, BOOL
布尔 TRUE, FALSE YES,NO
基本语句 if else switch for while do goto
for额外扩展 for ( xx in xx ) OC特有
面向对象概述
比较项目 OC
基类 NSObject
单继承 是单继承
接口 支持接口(协议) @protocol,接口方法可选实现
多继承 使用接口来实现多继承
多态 支持多态
抽象类 支持抽象类
异常处理 简单的异常处理
虚函数 所有的函数都是虚函数
和C/C++一些比较
OC和C/C++一样,都是用如下:
/* ... */ 和 //作为注释
BOOL,YES,NO
在C++中,布尔类型是bool, 在OC中,布尔类型是BOOL,布尔值有YES和NO两种
ID类型
OC中,每个目标都可以表达为ID类型,范性,可以认为是 NSObject * 或者void *
nil
nil等同于 null, 表示一个目标的指针
类的定义
OC类分为2个文件,一个是.h,一个是.m文件
.h文件存放类,函数申明
.m文件存放类的具体实现
类申明使用关键字@interface @end来申明
类实现使用关键字@implementation @end来实现
类声明 <Dog.h>
#import <Foundation/Foundation.h>
@interface Dog : NSObject {
//此处写字段
}
//此处写函数
@end
导入 To import or include ?
#import head.h
C/C++使用 #include 来包含头文件。缺点就是可能同一个头文件可能被包含多次
Object-C使用了#import来包含头文件。优点就是同一个头文件只能包含一次。
#ifndef __HEAD_H__
#define __HEAD_H__
#endif
创建/销毁OC对象
创建对象
Dog * dog = [Dog alloc];
初始化构造函数
[dog init];
销毁对象
[dog release];
类中字段和函数
@interface Dog : NSObject {
int age; //字段定义在此
}
- (void) setAge:(int) newAge; //函数定义在此
@end
字段定义
C++和OC在变量申明一样,都有public protected private 三种作用域
(C++) public: protected: private:
(OC) @public @protected @private
OC缺少是@protected
C++和OC在函数声明不一样
OC函数全部都是public类型(用另外方式实现 private化)
变量必须类 {}之间的地方
变量作用域申明
文件Dog.h
@interface Dog : NSObject {
@public //可以是@public @protected @private
int age;
@protected
int ID;
@private
float price;
}
@end
类申明比较
所有OC类,接口声明必须要带 *
这里*既表示指针也表示引用
OC:
Dog * myDog;
这里 * 即表示指针(又不表示指针), 也表示引用
可以通过myDog->dog 或者 myDog.dog这些方法来访问
一个典型类的实现
类声明<Dog.h>
#import <Foundation/Foundation.h>
@interface Dog : NSObject {
int ae;
}
//下面这些在OC中是消息,但是为了方便理解就叫函数
-(id) init;
-(id) initWithAe:(int)newAge;
-(int) getAge;
-(void) setAge:(int)newAge;
@end
Dog.m
#import "Dog.h"
@impolementation Dog
-(id)int {
return [self initWithAge:10];
}
-(id) initWithAge:(int)newAge{
self = [super init];
if (self) {
age = newAge;
}
return self;
}
-(int) getAge {
return age;
}
-(void) setAge:(int) newAge {
age = newAge;
}
@end
函数定义
在OC中属性是申明只能在@interface{和}之间。
属性的使用和C语言类似
在@interface{和}之间不能定义方法。
方法的定义是:
- (int) f : (int)x;
这里-表示对象的方法,+表示类的方法和C++类似
返回值或者参数的类型申明是使用()包含
参数分割使用:来分开
函数定义例子
典型的函数和变量定义
文件Foo.h
@interface Foo : NSObject {
double x;
}
-(int) f:(int) x;
-(float) g :(int)x :(int)y;
@end
文件Foo.m
#ipmort "Foo.h"
@implementation Foo
-(int) f:(int) x {...}
-(float) g:(int)x :(int)y {...}
@end
多参数情况
-(int) f:(int)x; 类似于C中的int f(int x);
函数不带参数(函数名:f)
- (int) f
类似C int f()函数
带一个参数(函数名: f:x)
- (int) f:(int)x
类似C的 int f(int x)函数
带两个参数(函数名:f::)
- (float) f:(int)x :(int)y
类似C的float f(int x,int y);
多参数方法
带两个参数(函数名:f::)
- (float) f:(int)x :(int) y
参数能够在:前面设置一个标签label,标签label也是函数名的一部分,标签是为了方便阅读(不带标签实际上也有一个匿名标签)
比如上述函数可以改成
- (float) f:(int)x g:(int)y
这里 g表示标签,函数名是f:g:
第一个参数不能有标签,事实上函数名就是第一个参数的标签
函数调用对别
比较项目 C OC
无参数 int foo(); - (int) foo;
如何调用的 int ret = obj->foo(); int ret = [obj foo];
一个参数 int foo(int a); - (int) foo:(int)a;
如何调用的 int ret = obj->foo(100); int ret = [obj foo:100];
二个参数 int foo(int a,int b); -(int)foo:(int)a :(int)b;
如何调用的 int ret = obj->foo(10,20); int ret = [obj foo:10 :20];
带标签 int fooAndB(int a, int b); -(int) foo:(int)a andB:(int)b;
如何调用的 int ret = obj->fooAndB(10,2); int ret = [obj foo:10 andB:2];
三个参数例子
C例子
int insertObjectAtIndexBefore (Object o, int index, boolean before);
int ret = obj->insertObjectAtIndexBefore(str, 2, true);
OC例子
-(int) insertObject:(NSObject *)o AtIndex:(int)index Before:(BOOL)before
int ret = [obj insertObject:10 AtIndex:2 Before:TRUE];
多参数的方法调用
-(void) insertObject:(int) value :(unsigned int)index
返回值 函数名 第一个参数 第二个参数
第二个参数不带标签label,也就是匿名标签,函数名
insertObject::
调用方法:[obj insertObject:100 :20]
[obj insertObject:101 :21]
-(void) insertObject:(int)value atIndex:(unsigned int)index
返回值 函数名 第一个参数 标签 第二个参数
第二个参数的标签是atindex。函数名为insertObject:atIndex:
调用方法:[obj insertObject:100 atIndex:20];
[obj insertObject:101 atIndex:21];
函数重载
@interface Foo : NSObject {}
-(int) g:(int) x;
-(int) g:(float) x; //错误:这个方法和前一个方法冲突(因为没有标签)
-(int) g:(int) x:(int) y; //正确:两个匿名的标签
-(int) g:(int) x:(float) y; //错误:也是两个匿名的标签
-(int) g:(int) x andY:(int) y; //正确:第二个标签是andY
-(int) g:(int) x andY:(float) y; //错误:第二个标签也是andY
-(int) g:(int) x andAlsoY:(int) y; //正确:第二个标签是andAlsoY
@end
各类函数名
@interface Foo : NSObject{}
//函数名是"g"
-(int)g;
//函数名是"g:"
-(int)g:(float)x;
//函数名是"g::"
-(int)g:(float)x :(float)y;
//函数名是"g:andY:"
-(int)g(float)x andY:(float) y;
//函数名是"g:andZ"
-(int)g:(float) x andZ:(float) z;
@end
Message消息机制
使用发送目标对象一个消息来达到处理函数
使用如下的格式来出来发送消息
[object message]
object.message
因为是动态绑定,消息和接受者都是在运动时动态绑定在一起。
object表示一个对象或者一个类,
message消息也可以认为是一个函数。
函数作用域申明
OC在.h头文件定义的所有函数都是public类型
OC通过Categories来实现函数的私有化
文件Dog.h
#import <Foundata/Foundation.h>
@interface Dog : NSObject
{//写字段
@protected
int ID;
@public
int age;
@private float price;
}
// 凡是以initXXXX开头的都是构造函数
- (id) init;
//函数名为init 不带参数
- (id) initWithID:(int)new ID;
//函数名为initWithID:带一个init的参数
- (id) initWithID:(int)newID andAge:(int) newAge;
//函数名为initWithID:andAge: 带2个参数,都为int
- (id) initWithID: (int)newID andAge:(int) newAge andPrice:(float) newPrice;
//函数名为initWithID:andAge:andPrice
//带有3个参数,都是为int
- (void) setID:(int)newId;
- (int) getID;
// set/get ID
- (void) setAge: (int)newAge;
- (int) getAge;
- (void) setPrice:(float) newPrice;
- (float) getPrice;
- (void) setID:(int)newID andAge:(int)newAge;
// setIDandAge: 2个参数
- (void) setID:(int)newID andAge:(int)newAge andPrice:(float)newPrice;
// setID:andAge:andPrice: 3个参数
@end
文件Dog.m
#import "Dog.h"
@implementation Dog
- (id) init{
self = [super init];
// super表示父类
// self 表示对象自己
if (self) {
ID = 1;
age = 2;
price = 60.0f;
}
return self;
}
- (id) initWithID:(int)newID {
self = [super init]; //初始化父类的构造方法
if(self) {
ID = newID;
age = 2;
price = 60.0f;
}
return self;
}
- (id) initWithID:(int)newID andAge:(int) newAge{
return [self initWithID:newId andAge:newAge andPrice:60.0f];
}
- (id) initWithID: (int)newID andAge:(int) newAge andPrice:(float) newPrice{
self = [super init];
if(self) {
ID = newID;
age = newAge;
price = newPrice;
}
return self;
}
- (void) setID: (int) newID {
id = newID;
}
- (int) getID {
return ID;
}
-(void)setAge:(int)newAge {
age = newAge;
}
-(int)getAge{
return age;
}
-(void) setPrice:(float) newPrice {
price = newPrice;
}
-(float)getPrice {
return price;
}
-(void)setID:(int)newID andAge:(int)newAge {
ID = newID;
age = newAge;
price = newPrice;
}
@end
文件main.m
@autoreleasepool
Dog *dog1 = [Dog alloc];
[dog1 init];
init ID = [dog1 getID];
int age = [dog1 getAge ];
float price = [dog2 getPrice];
printf("dog1 id is%d age is %d price is %$", ID,age,price );
// dog1 id is 1 age is 2 price is 60.000000
// Dog *dog2 = [Dog alloc];
// [dog2 initWithID:100 andAge:26 andPrice:68.88];
Dog *dog2 = [[Dog alloc] initWithID:100 andAge:36 andPrice:68.88];
ID = [dog2 getID];
age = [dog2 getAge];
price = [dog2 getPrice];
printf("dog2 id is%d age is %d price is %f\n", ID,age,price );
//dog2 id is 100 age is 36 price is 68.879997
[dog2 setID:2012 andAge:38 andPrice:87.2];
printf("dog2 new id is%d age is %d price is %f\n", ID,age,price );
发表评论
-
自定义导航栏样式
2015-06-17 19:14 981-(void)setupAppAppearance { ... -
Objective-C编码规范[译]
2015-06-04 10:09 1086原文链接 : ... -
友盟统计页面技巧
2015-06-03 17:47 1253在基类调用就可以了, 基类ViewController示例 ... -
自定义按钮, 图片在上, 文字在下, 居中显示
2015-06-03 16:13 1426#import <UIKit/UIKit.h> ... -
presentModalViewController 的动画效果
2015-04-20 10:28 1135系统自带(四种效果): presentModalViewC ... -
dictionary的使用要注意
2015-03-08 17:45 847NSDictionary *dict = [NSDicti ... -
uicollectionview 纯代码布局, 添加头部视图
2015-03-07 18:23 2087#import <UIKit/UIKit.h> ... -
截取视图的图片, 然后分享出去
2015-02-11 09:54 983OS 7 has a new method that al ... -
从零开始学swift计时器app开发
2015-02-06 22:10 589参考Jason Li 8个月前的教程开发 http://sw ... -
NsTimer 和 UITableViewCell 之间的控制
2015-01-30 10:14 2158情况是这样的: 一个UITableView, 每个Cell ... -
IOS行货自动打包
2015-01-12 11:35 1088通常打包采用xcodebuild和xcrun两个命令,xco ... -
xcodebuild和xcrun实现自动打包iOS应用程序
2015-01-12 11:34 4475随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随 ... -
ios UICollectionView的使用
2014-12-30 14:53 1779UICollectionView的使用有两种方法,一种是继承 ... -
iOS安全攻防(一):Hack必备的命令与工具
2014-12-26 00:34 956Hack必备的命令与工具 你的应用正在被其他对 ... -
使用Jenkins搭建iOS开发的CI服务器
2014-12-24 18:51 2452[http://webfrogs.me/2013/12/31 ... -
dSYM 文件分析工具
2014-12-24 18:35 975转自:http://answerhuang.duapp.co ... -
中文 iOS/Mac 开发博客列表
2014-12-24 14:47 1191本博客列表会不断更新维护,如果有推荐的博客,请到此处提 ... -
给iOS工程增加Daily Build
2014-12-24 00:33 937转自:http://blog.devtang.com/blo ... -
使用NSString 的格式化大全
2014-12-24 00:00 1110格式定义The format specifiers supp ... -
如何在两个ViewController之间传递数据
2014-12-11 15:19 0参考: http://blog.sina.com.cn/ ...
相关推荐
本教程将通过一系列的PPT课件,引导你快速入门Objective-C,这些课件覆盖了从基础到高级的重要概念,是《iPhone与iPad开发实战》一书中关于语言学习的前半部分内容。 首先,我们从"第一讲 Objective-C概述"开始,这...
总的来说,Objective-C 是一个强大且灵活的语言,虽然现在 Swift 已成为苹果官方推荐的开发语言,但 Objective-C 仍然在许多现有项目中广泛使用,而且理解其基本概念对学习 Swift 也非常有帮助。通过逐步学习和实践...
Objective-C是一种基于C语言的面向对象编程语言,它是苹果公司Mac OS X和iOS操作系统的主要开发语言。Objective-C的特性使其成为构建Cocoa框架应用程序的理想选择。以下是对Objective-C关键概念的详细解释: 1. **...
这篇“Objective-C学习笔记”旨在帮助初学者理解并掌握这种强大的编程工具。 一、Objective-C基础 1. 类与对象:Objective-C中的所有操作都是基于类的,类是对象的模板,而对象是类的实例。理解类和对象的概念是...
《Objective-C程序设计 第6版》是学习和深入理解这种语言的重要参考资料,旨在帮助开发者掌握Objective-C的基础以及高级概念。 这本书的核心内容可能包括以下几个方面: 1. **Objective-C基础**:Objective-C是在...
Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 ...
Objective-C是一种广泛用于苹果平台应用程序开发的编程语言,它是C语言的一个超集,并加入了Smalltalk风格的消息传递机制。本篇教程主要面向初学者,介绍了Objective-C的基础知识点和一些核心概念。 1. Objective-C...
Objective-C 是一种面向对象的编程语言,起源于20世纪80年代,由Bard Cox发明,后来在NeXTSTEP操作系统中得到广泛应用。NeXT公司由Steve Jobs创立,并在1996年被苹果公司收购,Objective-C也随之成为苹果操作系统的...
这意味着Objective-C语言不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。Runtime系统是一种用于Objective-C语言的操作系统,它使OC语言工作起来。 Runtime的核心是在运行时动态操作类和消息分发给...
在学习Objective-C之前,深入理解C语言的知识点至关重要。C语言以其高效、简洁和灵活性被广泛应用于系统编程、嵌入式开发、游戏引擎等领域。本资料主要涵盖了C语言的核心概念,旨在帮助你巩固基础,为之后学习...
本文将详细介绍如何在Windows系统下搭建一个完整的Objective-C开发环境。 #### 系统需求与准备 - **操作系统**:Windows 7 或更高版本 - **硬件要求**:足够的硬盘空间用于安装相关软件 #### 所需软件及下载 ...
《Objective-C高级编程:iOS与OS X多线程和内存管理》是一本深入探讨Apple平台开发中的关键技术的书籍。本书主要围绕Objective-C语言在iOS和OS X操作系统上的应用,特别是针对多线程和内存管理这两个核心主题进行...
Objective-C是一种面向对象的编程语言,它以其独特的动态性而闻名。这种动态性体现在它能够尽可能地将决策过程推迟到运行时执行,而不是在编译或链接阶段。因此,Objective-C不仅依赖于编译器,还需要一个强大的运行...
这篇笔记主要介绍了Objective-C的一些基础知识,包括以下几个方面: 1. Objective-C概述,介绍了Objective-C的来源、发展历史和作为面向对象的C语言的特点。 2. 第一个OC程序,讲解了如何创建一个OC项目,解释了一些OC...
Objective-C是一种面向对象的编程语言,它是C语言的扩展,最初由Brad Cox在20世纪80年代开发,并且广泛应用于Mac OS X和iOS的应用程序开发中。Objective-C在C语言的基础上增加了Smalltalk风格的消息传递机制,允许...
本资源包含了《Objective-C 2.0程序设计》的第二版中文版及其源代码,以及《Effective Objective-C 2.0》的英文版电子书。这些书籍是深入学习Objective-C 2.0编程的宝贵资料,对于想要掌握这一语言的开发者来说非常...
1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,因此,理解C语言的基本语法是必要的。Objective-C添加了消息传递机制、类和协议等面向对象特性。 2. **消息传递**:Objective-C中的对象通过发送消息来...
本书《Objective-C程序设计 第6版》是深入学习这一语言的重要资源,它为初学者和有经验的开发者提供了全面而深入的指导。 Objective-C起源于C语言,增加了Smalltalk的面向对象特性,如类、消息传递和动态类型。在...
Objective-C是一种强大的面向对象编程语言,它是Apple生态系统中开发iOS、macOS和其他Apple平台应用程序的主要语言。本学习资料集合了Objective-C的基础知识,非常适合初学者入门。以下将详细阐述Objective-C的一些...
希望这个简单的Objective-C语言教程能够为你提供一个入门的起点。Objective-C是一种面向对象的编程语言,广泛应用于Mac OS和iOS开发。通过学习Objective-C的基本语法、类和对象、控制流程和方法等内容,你将能够编写...