黑马程序员_第一个OC程序
2014-05-30 13:59
381 查看
----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------
运行结果:
这是用OC代码写出的hello world程序,同printf函数的输出相比,OC输出内容多出许多。用NSLog输出的内容多了时间擢和工程名称。这说明NSLog的功能比printf更为复杂。下面详细说明第一个程序的含义。
#import相当于C语言的#include,都是包含文件所需的头文件。两者不同的是,#include是原模原样的拷贝头文件的内容,不做其他任何处理,而#import则不仅拷贝头文件的内容,还能防止头文件的重复包含,节省编译效率。
这段main函数的代码和C语言基本完全相同,都是对主函数的说明,可以像C语言一样直接用主函数方式来理解。
NSLog()函数,即OC中常用的输出函数。@""表示的是要输出的字符串对象,一般将要输出的内容传入其中,然后转成对象经过函数的处理之后,最后输出在控制台。由于NSLog函数会输出时间擢和有关进程之类的内容,所以在运行大量打印函数时会很消耗性能,所以,在运行少量代码时,NSLog有较好的调试作用。
这些关键字在OC环境中通用。
@符号的关键字是OC特有的关键字,这些常用的关键字从C语言中拓展而来,丰富了从C演化而来的面向对象的编程机制。这使得OC编程语言不仅具有C强大的运算能力,又使其具有独特的面向对象的特性。
这些OC中的特殊标识符有着自身独特的作用,它们拓展了OC的性能,也兼容了其他语言的特性,使得OC在处理小数据和特殊类型数据中显得得心应手
one.h
one.c
运行结果:
上面的程序运行结果证明,OC可以和C进行混合编程,即OC的代码可以直接调用C程序中的函数进行编程。同时,OC兼容C的语法和函数的用法,所以在OC的程序中直接使用C语言的东西也是可以的。
main.m
写在一个文件可以同时实现声明和使用自己定义的一个类,但是这样写如果代码量大的话,不易管理和扩展。所以也可以把类声明和实现分开,这样,使用起来方便一些。
Car.h
Car.m
main.m
运行结果:
将类分开文件声明实现时,要注意在main.m文件使用定义的类时,不要忘记把类的声明头文件引入进来。
运行结果:
在实现文件中,有三个方法,一个不带参数的,一个带参数的,还有一个直接有返回值的。OC中的成员变量,在声明时初始化值都为0,在方法调用之后,值被改变。但是成员变量默认是不能被外部直接访问的,加上@public之后才能访问。OC调用方法用中括号来使用。OC中方法也可以不用创建引用直接调用方法,就是匿名调用。匿名调用,本身会创建匿名对象来调用方法。
main.m
匿名对象因为没有引用,所以创建一个匿名对象就新增一个对象,调用的方法不属于一个对象的。因此,打印出的结果都是默认的新建对象的初始化值。
@public 作用域不受限制,可以在所在类及其子类的方法中使用,也可以在其他类定义的方法中使用。
@protected 作用域只能在所在的类及其子类的方法中使用
@private 只能在所属类中的方法中直接使用,不能在其他类中直接使用
@package 修饰所属成员变量与@public相同,修饰其他类中的相当与@private
IOS项目
![](https://img-blog.csdn.net/20140530135224390?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHNtc2VlZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20140530135312531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHNtc2VlZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20140530135338234?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHNtc2VlZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
最终运行结果:
![](https://img-blog.csdn.net/20140530135441031?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHNtc2VlZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------
OC简介
OC全称Objective C是一门面向对象的编程语言,是对C语言的扩展。OC语言早在80年代就存在于世,在苹果公司的开创之处这门语言并未被世人所关注,但是在乔布斯创立了nextstep公司之后,这门语言的强大才渐渐的付出水面,乃至到如今倍受开发者们追捧。由于上从C语言演化而来,所以OC兼容C和C++语言的语法特性,可以支持语言间的混合编程。同时,OC也有着同JAVA这类面向对象语言一样的类似垃圾回收的功能,但是,OC的垃圾回收同JAVA的有着性质上的不同。OC的内存管理使用的是ARC机制,即内存自动释放,无需手动管理内存。OC还有一个最大的优势就是它自身是直接基于UNIX系统来运行的,无需中间件技术或附加其他运行环境。这使得用OC语言写出的代码无论运行速度和运行效率都无需做过多的优化。OC的第一个程序
#import <Foundation/Foundation.h> int main() { NSLog(@"hello world"); return 0; }
运行结果:
2014-05-26 16:27:14.498 o[1063:303] hello world
这是用OC代码写出的hello world程序,同printf函数的输出相比,OC输出内容多出许多。用NSLog输出的内容多了时间擢和工程名称。这说明NSLog的功能比printf更为复杂。下面详细说明第一个程序的含义。
#import <Foundation/Foundation.h>
#import相当于C语言的#include,都是包含文件所需的头文件。两者不同的是,#include是原模原样的拷贝头文件的内容,不做其他任何处理,而#import则不仅拷贝头文件的内容,还能防止头文件的重复包含,节省编译效率。
int main() { return 0; }
这段main函数的代码和C语言基本完全相同,都是对主函数的说明,可以像C语言一样直接用主函数方式来理解。
NSLog(@"hello world");
NSLog()函数,即OC中常用的输出函数。@""表示的是要输出的字符串对象,一般将要输出的内容传入其中,然后转成对象经过函数的处理之后,最后输出在控制台。由于NSLog函数会输出时间擢和有关进程之类的内容,所以在运行大量打印函数时会很消耗性能,所以,在运行少量代码时,NSLog有较好的调试作用。
OC关键字
OC的关键字除了包含C语言的32个关键字外,还有一些带@符号的特有关键字和特殊标识符。1.C语言常用的32个关键字
auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static
这些关键字在OC环境中通用。
2.一些带@符号的特有关键字
@interface OC中的类的声明 @implementation OC中的类的实现 @end 与@interface,@implementation和@protocol结合使用表示类的声明或是实现的结尾 @public 修饰成员变量,且作用于不受限制,可以在类内类外定义的方法中直接访问 @protected 修饰成员变量,只能在其所属类及其子类中的方法中访问 @private 修饰成员变量,只能在其所属类的方法中访问,不能在其他类中访问 @selector 将一个类的方法封装成SEL类型的变量 @try OC中检测异常,相当于JAVA中的try @catch OC中的异常处理,相当于JAVA中的catch @throw OC中的声明异常,相当于JAVA中的throw @finally 最后会执行的代码,与@try,@catch结合使用,相当于JAVA中的finally @protocol 声明一个协议 @optional 表示声明的协议中的指定几个方法可以不实现 @required 表示声明的协议中的指定的方法必须实现 @class 类的引用声明 @property 自动生成一个与成员变量同名的方法声明和实现 @synthesize 自动生成与@property对应声明的方法实现 @dynamic 指定方法的实现有开发人员自己完成不自动生成 @autorelease 自动释放池
@符号的关键字是OC特有的关键字,这些常用的关键字从C语言中拓展而来,丰富了从C演化而来的面向对象的编程机制。这使得OC编程语言不仅具有C强大的运算能力,又使其具有独特的面向对象的特性。
3.OC中的特殊标识符
BOOL 布尔类型标识符 Class 类对象类型标识符 self 表示方法调用者本身 super 表示调用者优先去自己的父类中寻找指定方法 id 通用对象指针,即万能指针 nil 空对象 Nil 空类对象 Yes 定义BOOL类型的值为1 No 定义BOOL类型的值为0 SEL 已经编译的选择程序 _cmd 表示当前方法的一个SEL类型的指针 _func_ 表示当前方法或函数的方法名或是名称 __block 被修饰的变量可以在block中修改其值 __strong 声明的引用为强引用 __weak 声明的引用为弱引用
这些OC中的特殊标识符有着自身独特的作用,它们拓展了OC的性能,也兼容了其他语言的特性,使得OC在处理小数据和特殊类型数据中显得得心应手
OC语法
1.与C语言的通用
main.m#import <Foundation/Foundation.h> #import "one.h" int main() { int n = 10; int num = fun(n); NSLog(@"%d",num); return 0; }
one.h
#ifndef o_one_h #define o_one_h int fun(int n); #endif
one.c
#include <stdio.h> int fun(int n) { return n * 10; }
运行结果:
2014-05-26 23:14:08.620 o[1406:303] 100
上面的程序运行结果证明,OC可以和C进行混合编程,即OC的代码可以直接调用C程序中的函数进行编程。同时,OC兼容C的语法和函数的用法,所以在OC的程序中直接使用C语言的东西也是可以的。
2.类的声明和实现
OC类的声明用关键字@interface来声明,用implementation实现类的方法。一般类的实现声明可以写在一个.m文件里,也可以声明和实现分别写在对应的.h和.m文件中。后者代码结构清晰,方便管理。main.m
#import <Foundation/Foundation.h> @interface Car : NSObject { int wheels; int speed; } - (void)run; - (int)count; @end @implementation Car - (void)run { NSLog(@"wheels %d, speed %d",wheels,speed); } - (int)count { return 10; } @end int main() { Car *c = [C b764 ar new]; [c run]; int b = [c count]; NSLog(@"count is %d",b); return 0; }
写在一个文件可以同时实现声明和使用自己定义的一个类,但是这样写如果代码量大的话,不易管理和扩展。所以也可以把类声明和实现分开,这样,使用起来方便一些。
Car.h
#import <Foundation/Foundation.h> @interface Car : NSObject { int wheels; int speed; } - (void)run; - (int)count; @end
Car.m
#import "Car.h" @implementation Car - (void)run { NSLog(@"wheels %d, speed %d",wheels,speed); } - (int)count { return 10; } @end
main.m
#import <Foundation/Foundation.h> #import "Car.h" int main() { Car *c = [Car new]; [c run]; int b = [c count]; NSLog(@"count is %d",b); return 0; }
运行结果:
2014-05-30 12:02:18.384 car[932:303] wheels 0, speed 0 2014-05-30 12:02:18.398 car[932:303] count is 10
将类分开文件声明实现时,要注意在main.m文件使用定义的类时,不要忘记把类的声明头文件引入进来。
3.方法调用
OC的方法调用可以分为有参方法和无参方法。OC的方法在声明和实现上,与C也有着较大的不同。#import <Foundation/Foundation.h> @interface Person : NSObject { NSString *name; @public int age; } - (void)print; - (void)setName:(NSString *)newname; - (int)getAge; @end @implementation Person - (void)print; { NSLog(@"name = %@",name); NSLog(@"age = %d",age); } - (void)setName:(NSString *)newname { name = newname; } - (int)getAge { return age; } @end int main() { Person *p = [Person new]; [p setName:@"seed"]; p->age = 10; NSLog(@"age = %d",[p getAge]); [p print]; return 0; }
运行结果:
2014-05-30 12:25:24.013 person[989:303] age = 10 2014-05-30 12:25:24.015 person[989:303] name = seed 2014-05-30 12:25:24.016 person[989:303] age = 10
在实现文件中,有三个方法,一个不带参数的,一个带参数的,还有一个直接有返回值的。OC中的成员变量,在声明时初始化值都为0,在方法调用之后,值被改变。但是成员变量默认是不能被外部直接访问的,加上@public之后才能访问。OC调用方法用中括号来使用。OC中方法也可以不用创建引用直接调用方法,就是匿名调用。匿名调用,本身会创建匿名对象来调用方法。
main.m
#import <Foundation/Foundation.h> @interface Person : NSObject { NSString *name; @public int age; } - (void)print; - (void)setName:(NSString *)newname; - (int)getAge; @end @implementation Person - (void)print; { NSLog(@"name = %@",name); NSLog(@"age = %d",age); } - (void)setName:(NSString *)newname { name = newname; } - (int)getAge { return age; } @end int main() { [[Person new] setName:@"lsm "]; [Person new]->age = 10; NSLog(@"age = %d",[[Person new] getAge]); [[Person new] print]; return 0; }
运行结果:
2014-05-30 14:24:13.311 ff[1440:303] age = 0 2014-05-30 14:24:13.314 ff[1440:303] name = (null) 2014-05-30 14:24:13.316 ff[1440:303] age = 0
匿名对象因为没有引用,所以创建一个匿名对象就新增一个对象,调用的方法不属于一个对象的。因此,打印出的结果都是默认的新建对象的初始化值。
4.成员变量的限定符
@public 作用域不受限制,可以在所在类及其子类的方法中使用,也可以在其他类定义的方法中使用。@protected 作用域只能在所在的类及其子类的方法中使用
@private 只能在所属类中的方法中直接使用,不能在其他类中直接使用
@package 修饰所属成员变量与@public相同,修饰其他类中的相当与@private
OC的应用
OC目前主要的应用不仅是在IOS上开发应用程序,同时也是开发工具框架的核心。许多苹果的工具都是用OC写的,例如:Foundation,Cocoa等。为了以后能深入研究IOS开发的本质,OC是这个本源的钥匙。因此,OC语言是学习IOS开发的基础。IOS项目
最终运行结果:
----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------
相关文章推荐
- 黑马程序员---objective-c基础学习--第一个oc程序及代码分析
- 黑马程序员--Objective-C——第一个OC程序
- 《黑马程序员》认识OC的第一个程序(Objective-c)
- 黑马程序员——OC基础学习(一)---第一个OC语言程序和面向对象编程的基本认识
- 【黑马程序员】【OC语言】我的第一个OC程序
- 【Objective-C】04-第一个OC程序解析
- 【黑马程序员】C语言学习笔记之第一个C程序及编译运行(一)
- 第一个OC程序
- 黑马程序员JAVA基础-第一个程序
- 黑马程序员_第一个java程序HelloWorld
- 01.黑马程序员-简单的OC程序
- 【Objective-C】03-第一个OC程序
- 黑马程序员_第一个java程序HelloWorld
- 黑马程序员 用OC实现的一个计算文件夹下代码行数的小程序
- 黑马程序员_OC_第一个类,@property和@synthesize,Category,description方法
- 【Objective-C】03-第一个OC程序
- objective-c 第一个OC程序
- 【Objective-C】04-第一个OC程序解析
- 我的第一个用OC实现冒泡算法的程序
- 【Objective-C】04-第一个OC程序解析