黑马程序员 《ios零基础教程》 --基础语法、类和对象 2014-4-21总结
2014-04-21 22:00
465 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------
今天有看各位师兄的bolg,自己感觉深是压力山大,以前也没做过blog,所以现在认真补起来。
今天开始总结关于OC的学习资料。关于“基础语法”和“类和对象”。
2>实例图
![](http://img.blog.csdn.net/20140421211438062?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE1MjI3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2>实例图
![](http://img.blog.csdn.net/20140421211734093?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE1MjI3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2>实例图
![](http://img.blog.csdn.net/20140421212049859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE1MjI3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1.对象方法都是以减号 -开头
2.对象方法的声明必须写在@interface和@end之间
对象方法的实现必须写在@implementation和@end之间
3.对象方法只能由对象来调用
4.对象方法归类\对象所有
函数:
1.函数能写在文件中的任意位置(@interface和@end之间),函数归文件所有
2.函数调用不依赖对象
3.函数内部不能直接通过成员变量名访问某个对象的成员变量,如《09-...》文件中在函数中通过指针修改成员变量
方法:
1>返回 π
2>计算某个整数的平方
3>计算两个整数的和
2>实例图
![](http://img.blog.csdn.net/20140421212920312?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE1MjI3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20140421212936593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE1MjI3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20140421212951109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE1MjI3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
----------------------
<a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
----------------------
今天有看各位师兄的bolg,自己感觉深是压力山大,以前也没做过blog,所以现在认真补起来。
今天开始总结关于OC的学习资料。关于“基础语法”和“类和对象”。
一、基础语法
1、关于OC程序基础的认识
1.#import的用途 1>跟#include一样,拷贝文件的内容 2>可以自动防止文件的内容被重复拷贝 2.#import<Foundation/NSObjCRuntime.h> NSObjCRuntime.h中有NSLlog函数的声明 3.Foundation框架头文件的路径 1>右击Xcode.app -->显示包内容 2>Xcode.app/Contents/Developer/Paltforms/iPhoneOS.platform/Developer/SDKs/ iPhoneOS6.0.sdk/System/Library/Frameworks/Foundation.framework 4.主头文件 1>主头文件:最主要的头文件,名字一般跟框架名称一样,包含了框架中的所有其他头文件 2>Foundation框架的头文件名称就是Foundation.h 3>只需要包含Foundation框架主头文件,就可以使用整个框架的东西 5.运行过程 1>编写OC源文件:.m 、 .c 2>编译:cc -c xxx.m xxx.c 3>链接:cc xxx.o xxx.o -framework Foundation (只有用到了Foundation框架才需要加上-framework Foundation) 4>运行:./a.out
2、关于BOOl函数
#import <Foundation/Foundation.h> BOOL test(BOOL mybool) { return NO; } int main(int argc, const char * argv[]) { @autoreleasepool { BOOL b = YES; BOOL b2 = NO; BOOL b3 = 1;//YES BOOL b4 = 0;//NO NSLog(@"%d", test(YES)); } return 0; }
二、面向对象
1、类的声明和实现
1>程序实例// // Car.h // 01-类的声明和实现 // // Created by hc on 14-4-3. // Copyright (c) 2014年 itcase. All rights reserved. // #import <Foundation/Foundation.h> //类的声明 //声明对象的属性、行为 //:NSObject 目的是:让Car这个类具备创建对象的能力 @interface Car : NSObject {//用来声明对象属性(成员变量,默认会初始化为0) //@public可以让外部的指针间接访问对象内部的成员变量 @public int wheels;//轮胎个数 int speed;//时速(xxkm/h) } //方法(行为):方法名、参数、返回值(声明、实现) //只要是OC对象的方法,必须以减号 - 开头 //OC方法中任何数据类型都必须用小括号()括住 //OC方法中的小括号()作用:括住数据类型 -(void) run; @end
#import "Car.h" //类的实现 @implementation Car //方法的实现(说清楚方法里面有什么代码) -(void) run { NSLog(@"车子跑起来了"); } @end
#import <Foundation/Foundation.h> #import "Car.h" /* 类名:Car 属性:轮胎个数、时速(速度) 行为:跑 */ //完整地写另一个函数:函数的声明和定义(实现) //完整地写一个类:类的声明和实现 int main(int argc, const char * argv[]) { @autoreleasepool { //在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称] //利用类来创建对象 //执行Car这个类的new行为来创建新对象 //定义了一个指针变量p,p将来指向的是Car类型的对象 //[Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址) Car *p = [Car new]; Car *p2 = [Car new]; //给p所指向对象的wheels属性赋值 p->wheels = 4; p->speed = 250; p2->wheels = 5; p2->speed = 300; NSLog(@"第一辆车%d个轮子,时速%dkm/h",p->wheels,p->speed); NSLog(@"第二辆车%d个轮子,时速%dkm/h",p2->wheels,p2->speed); [p run]; [p2 run]; } return 0; }
2>实例图
2、方法与成员变量
1>程序实例// // Person.h // 05-方法与成员变量1 // // Created by hc on 14-4-3. // Copyright (c) 2014年 itcase. All rights reserved. // #import <Foundation/Foundation.h> @interface Person : NSObject { @public int age; double weight; } -(void) walk; -(void) eat; @end
#import "Person.h" @implementation Person -(void) walk { NSLog(@"%d岁、%f公斤的人走了一段路",age , weight); } -(void) eat { NSLog(@"%d岁、%f公斤的人吃了一些东西",age , weight); } @end
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; p->age = 20; p->weight = 50; [p walk]; Person *p2 = [Person new]; p2->age = 30; p2->weight = 60; [p2 walk]; [p2 eat]; } return 0; }
2>实例图
3、对象与函数参数
1>程序实例#import <Foundation/Foundation.h> @interface Car : NSObject { @public int wheels; int speed; } -(void)run; @end
#import "Car.h" @implementation Car -(void)run { NSLog(@"%d个轮子 ,速度为%dkm/h的车子跑起来了",wheels,speed); } @end
#import <Foundation/Foundation.h> #import "Car.h" void test(int w ,int s) { w = 20; s = 200; } void test1(Car *newC) { newC -> wheels = 5; newC -> speed = 400; } void test2(Car *newC2) { Car *c2 = [Car new]; c2 ->wheels = 5; c2 ->speed = 300; //这里是将传入的c指针指向了c2,修改c2对象的值,函数执行完之后,不改变原来c的值 newC2 = c2; newC2 ->wheels = 6; } int main(int argc, const char * argv[]) { @autoreleasepool { Car *c = [Car new]; c -> wheels = 4; c -> speed = 250; // test1(c); test2(c); [c run]; } return 0; }
2>实例图
4、方法与函数的区别
方法:1.对象方法都是以减号 -开头
2.对象方法的声明必须写在@interface和@end之间
对象方法的实现必须写在@implementation和@end之间
3.对象方法只能由对象来调用
4.对象方法归类\对象所有
函数:
1.函数能写在文件中的任意位置(@interface和@end之间),函数归文件所有
2.函数调用不依赖对象
3.函数内部不能直接通过成员变量名访问某个对象的成员变量,如《09-...》文件中在函数中通过指针修改成员变量
5、基本类型的属性
typedef enum { SexMan, //这里的枚举名之前需要加上性别名称变量名称Sex,养成良好编程习惯便读识。 Sexwoman } Sex; typedef struct { int year; int month; int day; } Date; typedef enum { ColorBlack, ColorRed, ColorGreen } Color;
#import <Foundation/Foundation.h> @interface Dog : NSObject { @public double weight;//体重 Color curColor; //毛色 } -(void) eat; -(void) run; @end @interface Student : NSObject { @public Sex sex; Date birthday; double weight; char *name; Color favColor; //重点:狗属性 Dog *dog; } -(void)eat; -(void)run; -(void)printf; -(void)liuDog; -(void)weiDog; @end
#import "Student.h" @implementation Dog -(void) eat { //每吃一次,体重+1 weight += 1; //weight = weight +1 NSLog(@"狗吃完这次后体重是%f",weight); } -(void) run { weight -= 1; NSLog(@"狗跑完这次后体重是%f",weight); } @end @implementation Student -(void)eat { //每吃一次,体重就加1 weight += 1; NSLog(@"学生吃完之后体重是%f",weight); } -(void)run { //每跑完之后,体重减1 weight -=1 ; NSLog(@"学生跑完之后体重是%f",weight); } -(void)printf { NSLog(@"性别=%d, 最喜欢的颜色=%d, 姓名=%s, 生日=%d-%d-%d", sex, favColor,name,birthday.year ,birthday.month ,birthday.day); } -(void)liuDog { //让狗跑起来(调用狗的run方法) [dog run]; } -(void)weiDog { //让狗吃东西(调用狗的eat方法) [dog eat]; } @end
/* 学生 成员变量:性别、生日、体重、最喜欢的颜色、狗(体重、毛色、吃、跑) 方法:吃、跑步、遛狗(让狗跑)、喂狗(让狗吃) */ #import <Foundation/Foundation.h> #import "Student.h" void test(); int main(int argc, const char * argv[]) { @autoreleasepool { Student *s = [Student new];//这里相当于指向结构体的指针 Dog *d = [Dog new]; d -> curColor = ColorGreen; d -> weight = 20; s -> dog = d; // // [d run]; // [d eat]; [s liuDog]; [s weiDog]; test(); } return 0; } void test() { Student *s = [Student new];//这里相当于指向结构体的指针 s -> weight = 50; //性别 s -> sex = SexMan; //生日 Date d = {2011,9,10};//这里注意,只能在定义的时候初始化 s -> birthday = d; s -> name = "jack"; /* s -> birthday.year = 2011; s -> birthday.month = 9; s -> birthday.day = 10 */ //喜欢的颜色 s -> favColor = ColorBlack; [s printf]; [s eat]; [s eat]; [s run]; [s run]; }
6、方法的声明和实现
1>计算器类方法:
1>返回 π
2>计算某个整数的平方
3>计算两个整数的和
#import <Foundation/Foundation.h> @interface JuSuanQi : NSObject //方法名:Pi -(double)Pi; //OC方法中,一个参数对应一个冒号 //方法名:pingFang:(冒号也是方法名的一部分)如:声明 -(int)pingFang;它的方法名是pingFang -(int)Pingfang:(int) num1; -(int)sumNum2:(int)num2 andNum3:(int)num3; @end
#import "JuSuanQi.h" @implementation JuSuanQi -(double)Pi { return 3.14; } -(int)Pingfang:(int) num1 { return num1 * num1; } //-(int)sum:(int)num2 :num3 -(int)sumNum2:(int)num2 andNum3:(int)num3 { return num2 + num3; } @end
#import <Foundation/Foundation.h> #import "JuSuanQi.h" int main(int argc, const char * argv[]) { @autoreleasepool { JuSuanQi *jsq = [JuSuanQi new]; //int a = [jsq sum:10 :5]; int a = [jsq sumNum2:4 andNum3:6]; int b =[jsq Pingfang:5]; double pi =[jsq Pi]; NSLog(@"两个整数的平方是%d",b); NSLog(@"两个整数的和是%d",a); NSLog(@"π的值是%f",pi); } return 0; }
2>实例图
7、匿名对象
1>程序实例#import <Foundation/Foundation.h> @interface Car : NSObject { @public int speed; } -(void) run; @end
#import "Car.h" @implementation Car -(void) run { NSLog(@"速度为%d的车子跑起来了",speed); } @end
#import <Foundation/Foundation.h> #import "Car.h" int main(int argc, const char * argv[]) { @autoreleasepool { //不要写类似匿名对象这样的代码 //只要求能说出输出结果 [Car new] ->speed = 300; //这两又重新创建了一个Car对象,所以默认的speed为0 [[Car new] run]; } return 0; }
----------------------
<a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员 《ios零基础教程》-- ”Mac OS X的介绍”和一些“基础语法” 2014-3-18总结
- JavaScript面向对象基础语法总结
- 黑马程序员----java基础面向对象总结
- 黑马程序员--Java基础之语法和数组总结
- 黑马程序员-----java基础语法知识总结*
- 黑马程序员——Objective-C基础——面向对象语法03
- 黑马程序员 面向对象基础 总结
- 黑马程序员_类和对象的基础语法(一)
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- JavaScript的BOM(浏览器对象)基础语法总结
- 黑马程序员_java基础知识总结(1)面向对象基础总结
- 黑马程序员_ios基础总结2_C语言基本语法一
- 黑马程序员-Java基础总结02——Java基本语法(一)
- 黑马程序员:Java基础总结----对象包装类&自动装箱
- 黑马程序员_ios基础总结3_C语言基本语法二
- 黑马程序员-IOS-OC基础-面向对象语法一
- 黑马程序员-Java基础总结03——Java基本语法(二)
- 黑马程序员——Objective-C基础——面向对象语法02
- 黑马程序员------OC基础-----基础语法总结
- 黑马程序员 Java学习总结之面向对象和Java基础