黑马程序员 《ios零基础教程》 --基础语法、类和对象 2014-4-21总结

---------------------- <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>、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值