您的位置:首页 > 职场人生

黑马程序员 《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的学习资料。关于“基础语法”和“类和对象”。

一、基础语法

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>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: