OC的基础语法(一)

1.很多语言都是从helloWorld开始学习的,OC的helloWorld如下:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // OC版的HelloWorld
        NSLog(@"Hello, World!");
    }
    return 0;
}

2.代码分析

 1)头文件

  对比c语言中的#include学习

#include
<stdio.h>文件包含,把.h文件的内容拷贝到 当前些 #include 位置 #import <Foundation/Foundation.h> 文件包含,把.h文件的内容拷贝到 当前些 #import 位置,Foundation/Foundation.h 这是OC中的一个框架 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks 关于include 和 import 的区别: #include "" -用户定义的文件 #include <> -系统的文件 #import <> -系统的文件 #import "" -用户的文件 improt 是 include 升级版,自动防止重复包含,即便是重复的包含了,也只有一次包含会起作用 2)main 主入口函数 系统调用主入口函数 3)NSLog,输出内容到控制台

3.C和OC的对比

/*
 
 1)源文件对比
 
    C               OC
 .c                 .h
 .h                 .m  - OC的源文件
 .o
 .out
 
 
 2)数据类型、运算符
 
    C                OC
 基本数据类型        
 构造类型
 指针类型           
 空类型
 定义类型
                   BOOL      新的类型,存储YES 和 NO
                   id        万能的指针
                   Boolean   布尔类型,跟BOOL相似,存储的时 true 和 false
                   Class     类类型
                   特殊类型 
                        SEL  方法的选择器
                        nil  空的(对象为空)
                        block 块类型
 

 3)关键字、标示符
 
    C               OC
    32关键字         @...
 
 
    注意:C的关键字可以在OC中使用,OC的关键字不能在C中使用
         OC的关键字,大多数都是以 @ 开头
 
 
 4、语句控制(分支和循环)
 
 
    C               OC
  ----------------->
  1)分支
    if
    if else
    if else if else
 
    switch
 
 
  2)循环
    --------------->
    while 
 
    do while
 
    for
 
                   增强型的for循环(OC的快速枚举)
 
                   for in
 
                   格式:
                    for(数组类型 变量名 in 数组){
 
                              变量名;//直接使用,变量每次存储的值是不一样
                    }
 
 
  5、函数定义对比
 
      C                            OC
  返回值 函数名(形参){            OC中的函数不再叫"函数",叫方法

 
     函数体                     OC中的方法,分为两种:对象方法、类方法
 
  }
 
   
   //函数的调用
   函数名(实参);                 对象方法的调用:[对象名 方法名]
                               类方法的调用:[类名 方法名]

  6、OC中新增加的两个数据类型介绍
 
     逻辑型:BOOL   Boolean
 
     C                       OC
 
     &&                      BOOL
     ||                      Boolean
      !    
 
 
 
     BOOL  存储的时YES和NO
 
      YES 表示真   实际的值 1
      NO  表示假   实际的值 0
 
 
 
     Boolean 存储的时true 和 false
 
     true 表示真   实际值  1
     false 表示假  实际值  0
 
 */


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
      

// NSArray *arr = @[@"1",@"2",@"3"]; // // for (NSString *str in arr) { // // //输出字符串的内容 // NSLog(@"%@",str); // // } //1、BOOL 类型 //定义BOOL变量 BOOL flag = YES; //YES的值是 1 flag = NO; //NO的值就是 0 flag = 3>3; printf("floag = %d\n",flag); //2、Boolean类型(布尔类型) Boolean f1 = true; //true 1 f1 = false; //false 0 printf("f1 = %d\n",f1); BOOL flag1 =YES; while (flag1) { flag = NO; } } return 0; }

4.OC中的类

/*
 
 第一个OC类的定义:
 
   类的定义分为两部分:类的声明    类的实现
 
   1)类的声明写法

      格式:
      @interface  类名 :父类名
      {
          //成员变量的声明
      }
 
      //动作(方法)的声明
      @end
 
  
      声明一个学生类:
  
      @interface Student:NSObject
      {
          //属性的定义
          int age;
          int sno;
          float score;
      }
 
      //定义行为
      @end
 
   2)类的实现
 
      格式:
      @implementation 类名
 
 
      @end;
 
 
      实现一个学生类:实际上是实现类中声明的方法
 
      @implementation Student
 
      @end
 
 
      注意:
       1) @interface 、@implementation 、@end 一个oc的关键字
       2) @end 千万不能漏写
       3)类的声明和实现应该是成对出现
 
 
   3)对象的创建
 
         struct Student stu1;
 
         //定义一个Student 类型的变量
         //创建了一个Student类型的对象 对象名是 stu
         Student *stu = [Student new];
 
         [Student new];  //调用Student 的类方法
 
         做了三件事情:
 
         1)在内存的堆区分配一块内存
         2)给存储区域初始化(给类的每一个属性都初始化,基本数据类型,初始化为0,NSString 初始化为null)
         3) 返回刚分配的内存空间的首地址
 
 
    4)声明和实现类中的方法
 ‘
         在类的声明中 在 @interface  和  @end直接,并且在 属性声明的{}之外,就可以
         声明方法了
  
       声明方法:
 
          OC的方法有两个种:对象方法  和  类方法
    
               对象方法的特点:
 
               1)使用 - 号开头
               2)方法的返回值用 小括号括起来
               3)方法的名称严格遵守标示符命名规范
               4)对象想法,只能有 对象调用 
             
                 方法调用的格式:[对象名  方法名];
 
                  1)无参方法
         
                     -(返回值类型)方法名;
 
                     -(void)qiaoKe;
                     -(void)playGame;
                     -(void)tanlove;
         
                     实现:
                    在@implementation  和 @end之间
                     -(void)qiaoKe{
 
                     }
 
         
                  2)有参数的方法
 
                     (1)有一个参数的对象方法
 
                     -(返回值类型)xxx:(形参类型) 形参名;
  
                       注意:方法名:"xxx:"
 
                       调用:[对象名 方法名:实参];
 
                         实现:
                         在@implementation  和 @end之间
                         -(void)eat:(NSString *) foodName{
                         
                         }
 
                      (2)有二个或者多个参数的对象方法的声明
 
                      -(返回值类型)xxx:(形参类型) 形参名  andSSS:(形参类型) 形参名;
 
                       方法名:
                               xxx:    andSSS:
 
 
                         //声明了两个参数的方法
                         -(void)tlove:(NSString *) gf1 andGirl2:(NSString  *) gf2;
                        调用: [stu  tlove:@"" andGirl2:@""];
 
 
 
 */


#import <Foundation/Foundation.h>

//声明一个学生类
@interface Student:NSObject
{
    //属性(成员变量/实例变量)的定义
    @public
    int age;
    int sno;
    float score;
}

//定义行为
//翘课
-(void)qiaoKe;
//打游戏
-(void)playGame;
//谈恋爱
-(void)tanlove;

//声明了一个吃饭的方法
-(void)eat:(NSString *) foodName;

//声明了两个参数的方法
-(void)tlove:(NSString *) gf1 andGirl2:(NSString  *) gf2;

-(void)tlove:(NSString *) gf1 :(NSString  *) gf2;

@end

//实现一个学生类
@implementation Student

//翘课
-(void)qiaoKe{

    NSLog(@"正在翘课!");
}
//打游戏
-(void)playGame{

   NSLog(@"正在玩都斗地主!");

}
//谈恋爱
-(void)tanlove{

   NSLog(@"正在小花谈恋爱!");
}

//吃的方法
-(void)eat:(NSString *) foodName{

    NSLog(@"正在吃: %@ ",foodName);
}

//声明了两个参数的方法
-(void)tlove:(NSString *) gf1 andGirl2:(NSString  *) gf2{


    NSLog(@"正在和%@交往的同时,和%@也有一腿!\n",gf1,gf2);

}


-(void)tlove:(NSString *) gf1 :(NSString  *) gf2{

     NSLog(@"正在和%@交往的同时,和%@也有一腿!\n",gf1,gf2);

}
@end


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //创建一个学生类的对象
       Student *stu = [Student new];
        
        NSLog(@"age:%d,sno:%d,%.2f",stu->age,stu->sno,stu->score);
        
        //对象stu成员变量赋值
        //OC中默认的在类的外部不能访问类的成员变量
        //用@public 强制访问类的成员变量
        //通过对象stu进行赋值
        stu->age = 23;
        stu->sno = 110;
        stu->score = 56.78;
        
        NSLog(@"age:%d,sno:%d,%.2f",stu->age,stu->sno,stu->score);
        
        //用对象调用对象的方法
        [stu qiaoKe];
        [stu playGame];
        [stu tanlove];
        [stu eat:@"爆炒妙脆角"];
         
        //调用两个参数的方法
        [stu tlove:@"凤姐" andGirl2:@"芙蓉"];
        [stu tlove:@"凤姐" :@"芙蓉"];
        
        
    }
    return 0;
}

 

 

posted @ 2015-10-14 15:33  ios开发那点事  阅读(458)  评论(0编辑  收藏  举报