• objective-C 初识


                                objective-C

    objective-c 是c语言的改进版

    一、方法的定义:

    格式:

    -/+(返回值类型)方法名:(参数类型) 参数名 [方法名] : (参数类型) 参数名.........

    例如:-(int)max:(int) a andB : (int)b

    是说,定义了一个名为maxandB 的普通方法,其返回值为int,参数为a , b

    其中:-/+:-表示定义的是个普通方法;+表示定义的是个静态方法

    二、属性的定义:

    格式:属性类型  属性名(字符串属性名前面要加上*)

    例如:

       NSString *name;//字符串类型变量的定义

        int age;

        BOOL sex;//bollen类型的变量定义

    其中  NSString表示字符串类型;BOOL表示布尔类型(取值为YES/NO)

    相关关键字的简介:

    #import:用于导入类库

    @interface:定义类的公共接口 ,生成.h文件

    @implementation:实现类中的方法,生成.m文件

    注意:类为模板,不占用内存

    三、一个简单的OC程序

     

    #import <Foundation/Foundation.h>//<>导入系统的类

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

    {


        //基本类型的定义与c无异

        int n;//定义整型变量

        BOOL b;//定义布尔类型的变量

        //引用型变量的定义要在变量名前加相当于c中的指针

        NSString *ns;//定义字符串类型的变量

        

        n=3;//基本类型变量的赋值

        b=YES;//布尔类型变量的赋值

        ns=@"我的第一个OC程序";//引用型类型的赋值在要赋值的对象前加“@”

        

        NSLog(@"n的值为%d,b的值为:%d,ns的值为:%@",n,b,ns);//NSLog为输出函数,其输出形式和C基本上没区别。只是要在输出字符串前加“@”

        NSLog(@"到此结束");

        return 0;

    }

    四、类的创建和使用  以定义一个Student类为例

    1、在新建的项目文件上右击选择 NEW FILE ,然后在os x 下选择Cocoa 新建Objective-C class,然后next,输入类名Student,然后next,creat

    2、创建完后会在项目下自动生成 .h和.m两个文件,其中.h文件定义了类的公共属性和方法,相当于java中得接口,.m文件则实现.文件中定义的方法,相当于java中实现其接口

    3、在.h文件中定义类的公共的方法和属性  

     

    #import <Foundation/Foundation.h>

    @interface Student : NSObject //继承自NSObject

    {//成员(实例变量)变量区域(描述的类的特征)

        @public  //属性的范围定义----5个全为public

        NSString *name;//字符串类型变量的定义

        int age;

        BOOL sex;//bollen类型的变量定义

        NSString *hobby;

        NSString *address;

    }

    //声明方法的区域

    //成员变量的访问器(setget)其中get方法名和变量名一致,不带get字样

    //普通变量的setget方法的定义

    -(void)setAge:(int)newAge;

    -(int)age;

    //字符串型即object型方法的定义  一定要在变量类型后面加* 表示指针

    -(void)setName:(NSString *)newName;

    -(NSString *)name;

    -(void)sayHi;//无参数的话方法类型+方法名直接以分号结束不带有小括号

    +(void)study;

    //-代表的是普通的方法,用实例对象调用

    //+代表的是静态的方法,用类名调用

    @end

    4、.m文件中的实现

    #import "Student.h"//导入头文件  即类库

    @implementation Student//实现student接口

    //实现getset方法

    //普通属性setget方法的实现

    -(void)setAge:(int)newAge

    {

        if(newAge>0&&newAge<200)

        {

            age=newAge;

        }else

        {

            age=13;

        }

    }

    -(int)age

    {

        return age;

    }

    //字符串类型即object类型setget方法的实现

    -(void)setName:(NSString *)newName

    {

        name=newName;

    }

    -(NSString *)name

    {

        return name;

    }

    -(void)sayHi

    {

        NSLog(@"我叫%@,来自%@,今年%d",name,address,age);//占位符 字符串:%@   int%d char:%c bool:%d

    }

    +(void)study

    {

        //类方法不能调用成员变量

        NSLog(@"我正在学习ios开发。");

    }

    @end

    5、main方法中的测试:

    #import <Foundation/Foundation.h>//<>导入系统的类

    #import "Student.h"//“”导入自定义的类

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

    {


        @autoreleasepool {//自动的释放池 可以省略(删除)

            

            // insert code here...

            NSLog(@"Hello, World!");

            

        }

        //Student.alloc() Java  java中方法的调用  调用alloc方法

        //[Student alloc] OC  OC中方法的调用  调用alloc方法

        //创建对象的三种方法

        //第一种

    //    student *stu=[[Student new]];

        //第二种 常用

        Student *stu=[[Student alloc]init];

        //第三种  

    //    Student *stu=[Student alloc];

    //    stu=[stu init];

        //调用方法

        [stu sayHi];//对象调用普通方法

        [Studentstudy];//类调用静态方法

        

        //属性的赋值    编译的快捷键  window+b

        stu->name=@"张三";

        stu->address=@"滨州学院";

        stu->age=34;

        [stu sayHi];

        

        //调用getset方法

        //set方法的调用

        [stu setAge:25];//普通类型的方法的调用及赋值

        [stu setName:@"王五"];//字符串即object类型的方法的调用和赋值

        [stu sayHi];

        

        //get方法的使用

        int n=[stu age];//返回值为普通类型的方法的调用

        NSString *nn=[stu name];//返回值为object类型的方法的调用及使用

        NSLog(@"n=%d,nn=%@",n,nn);

        return 0;

    }

    五、在类中为属性定义读写器时比较麻烦,oc提供了一组关键字 @property @synthesize 来自动的生成set和get方
    以Student类中的age属性和name属性为例简单介绍其使用方法
    1、@property在.h文件中使用,放在属性定义列表即一对大括号的后面

    //.m文件中得@synthesize配套使用

    //基本类型的使用

    @property(nonatomic,assign)int age;//@property:当前类的属性  nonatomic:和多线程相关的参数(了解);assign:和内存相关的参数   作用:省去了age属性的setget方法的定义

    //对象类型的使用

    @property(nonatomic,retain)NSString *name;

    2、synthesize在.m文件中使用,放在@implementation的后面

    //.h中得@property(nonatomic,assign)int age;配套使用

    //基本类型的使用

    @synthesize age;//省去了age属性setget方法的实现,自动生成的方法无逻辑判断

    //自定义的setget方法会覆盖原来系统自动生成的方法  优先级高于自动生成的

    //对象类型的使用  和基本类型一样,可以写在一行中 @synthesize age,name;

    @synthesize name;

    3、在main方法中的测试

     //为自动生成的属性方法赋值  类似于c#中属性的定义,几乎一样

              //set的调用

        stu.age=30;//<=>[stu setAge:30];

        stu.name=@"李四";//<=>[stu setName:@"李四"];

        [stu sayHi];

        //get的调用

        int m=stu.age;//<=>[stu age];

        NSString *mm=stu.name;//<=>[stu age];

        NSLog(@"m=%d,mm=%@",m,mm);

    六、OC中自定义的实例初始化的方法
    自定义实例化方法的定义及使用:
    1、在.h文件中

    //自定义的初始化方法

    -(Student *)initWithName:(NSString *)newName andAge:(int)newAge andAddress:(NSString *)newAddress;

    //-代表的是实例化的方法,用对象去调用

    //返回类型为 Student *

    //方法名字为initWithName:andAge:andAddress:

    //参数有:newName,newAge,newAddres

    2、在.m文件中

    //自定义的初始化的方法的实现

    -(Student *)initWithName:(NSString *)newName andAge:(int)newAge andAddress:(NSString *)newAddress

    {

        if(self=[superinit])//self指当前对象  相当于java中的this

        {

            self->name=newName;

            self->age=newAge;

            self->address=newAddress;

        }

        return self;//返回实例好的对象

    }

    3、在main方法中的测试

     //使用自定义的初始化方法

        Student *stu1=[[Studentalloc]initWithName:@"张文文" andAge:55 andAddress:@"滨州职业学院"];//[Student alloc]:"根据类的模板Student申请相应的内存,alloc为申请内存关键字

        [stu1 sayHi];//调用方法


    七、OC中的便利构造器
    为了解决自定义初始化方法中在测试方法中分配内存的困扰,OC提供的构造器。通过类名调用该构造器来实现类的实例化
    构造器的定义和使用:
    1、在.h文件中

    //便利构造器 集成了对象实例化的内存分配和赋值简化了对象的实例化 

    //定义格式:

    +(Student *)studentWithName:(NSString *)newName andSex:(BOOL)newSex andAge:(int)newAge andAddress:(NSString *)newAddress;

    //为静态方法  通过类来调用


    2、在.m文件中

    //构造器的实现

    +(Student *)studentWithName:(NSString *)newName andSex:(BOOL)newSex andAge:(int)newAge andAddress:(NSString *)newAddress

    {

        Student *stu=[[Student alloc]init];//根据类型申请一块内存

       

        stu->name=newName;

        stu->sex=newSex;

        stu->age=newAge;

        stu->address=newAddress;

        

        //与上面的等价

      //  Student *stu=[[Student alloc]initWithName:newName andAge:newAge andAddress:newAddress];

        return stu;

    }


    3、在main测试方法中

    //便利构造器的使用

        Student *stu2=[Student studentWithName:@"李四灿" andSex:YES andAge:22 andAddress:@"淄博职业学院"];

        [stu2 sayHi];


    八、总结
    第一天
    类的定义
    实例变量(作用域)
    方法的定义
    set和get方法
    属性
    自定义初始化方法
    便利构造器

  • 相关阅读:
    Firefox常用插件
    给创业者的提醒
    Visual Studio 2005插件开发官方Demo下载
    Windows Media Player Firefox Plugin支持Server 2003
    【转】C++的64位整数
    【转】C++成员函数的内存分配问题
    【转】C++类的实例分布
    【转】 IntelliJ Idea 常用快捷键列表
    程序员必备神器
    程序员必备神器
  • 原文地址:https://www.cnblogs.com/riskyer/p/3323003.html
Copyright © 2020-2023  润新知