zoukankan      html  css  js  c++  java
  • IOS开发之基础oc语法

    1.类的定义:        

     类=属性+方法;

     -属性代表类的特征

     -方法是类能对变化做出的反应

         类定义的格式:类的声明和类的实现组成

     -接口(类的声明):@interface 类名:基类的名字

         .类名首字母要大写

         .冒号表示继承关系,冒号后面的是类的父类

         .NSObject是OC所有类的基类

         .类的声明放在“类名+.h”文件中,要由两部分组成:实例变量和方法

     -实现(类的实现):@implementation类名

         .方法实现

     -都用@end结束c

    2.类的使用:

    OC中,对象通过指针来声明   如:ClassA *object;

    OC中对象的创建,使用alloc来创建一个对象,编译器会给object对象分配一块可用的内存地址,然后需要对对象进行初始化即调用init方法,这样这个对象才可以使用,如:

    Person *person=[Person alloc];      //创建对象分配空间

    person=[person init];               //初始化赋初值,

    初始化后:int=0,char=“*0”?,bool=FALSE

    同一个类的每个对象有不同的实例变量的存储空间

    同一类的每个对象共享该类的方法

    方法嵌套的形式来调用,如:ClassA *object=[[ClassA alloc] init];

    3.类的访问权限

    三种访问权限:

    -公有的:@public

    -私有的:@private

    -保护的:@protected

    属性默认的权限是保护的

    方法默认的权限是公有的

    4.方法定义

    无参无返: -(void)print;

    无参有返: -(Person *)register;

    有参无返: -(void)intuit:(int)newId;

    有参有返: -(Person *)init:(int)newId;

    带一个参数的方法

    -(Person *) init:(int) newID;

    带两个参数的方法:

    -(Person *) init:(int) newID:(int) newAge;

    “:”是方法名的一部分

    -第一个方法名:init

    -第二个方法名:init:

    -第三个方法名:init::

    多参数方法定义:

    -(Person *)initWithId:(int) newID andAge:(int) newAge andName:(NSString *)name;

    可以在方法名前面加任意标记如“WithId”,“andAge”,“andName”以此类推

    5.实例                  

    main:

    #import <Foundation/Foundation.h>
    #import "dog.h"
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            //创建对象,即实例化对象
            Dog *haShiQi=[[Dog alloc]init];
            //方法调用
            [haShiQi bark];
            //属性赋值
            haShiQi->health=120;
            haShiQi->name=@"哈士奇";
            NSLog(@"狗的姓名:%@,健康值%d",haShiQi->name,haShiQi->health);
        }
        return 0;
    } 

    Dog.m:类的实现

    #import "Dog.h"     //引用类的声明文件
    @implementation Dog
    //方法实现
    -(void)bark{
        NSLog(@"汪汪");
    }
    @end

    Dog.h:类的声明

    #import <Foundation/Foundation.h>
    @interface Dog : NSObject   //声明类Dog,继承根基类NSObject
    //类的属性
    {
        @public;               //设置类的属性为公有(一般不允许使用)
        NSString *name;
        int health;
    }
    //对象方法
    -(void)bark;
    @end 

    6.类方法和对象方法对比                  

    ·对象方法(实例方法)

    -以减号“-”开头

    -只能让对象调用,没有对象,这个方法根本不可能被执行

    -对象方法能访问实例变量

    ·类方法

    -以加号“+”开头

    -只能用类名调用,对象不能调用

    -类方法中不能访问实例变量(成员变量)

    -使用场合:当不需要访问成员变量的时候,尽量用类方法

    -类方法和对象方法可以同名7.属性的存取方法

    ·获取属性值(getter)方法的定义

    -作用:返回对象内部的成员变量

    -命名规范:get方法的名称一般就跟成员变量同名

    ·设置属性的值(setter)方法的定义

    -作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值

    -命名规范:

    -方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写

    -形参名称不要跟成员变量同名

    8.getter,setter方法实例

    main:

    #import <Foundation/Foundation.h>
    #import "dog.h"
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            //创建对象,即实例化对象
            Dog *haShiQi=[[Dog alloc]init];
            //方法调用
            [haShiQi bark];
            //属性赋值
            [haShiQi setName:@"哈士奇"];   //调用setter方法赋值
            [haShiQi setHealth:120];
            NSLog(@"狗的姓名:%@ 健康状况:%d",haShiQi.name,haShiQi.health);
        }
        return 0;
    }

    Dog.m:类的实现

    #import "Dog.h"     //引用类的声明文件
    @implementation Dog
    //方法实现
    -(void)bark{
        NSLog(@"汪汪");
    }
    //setter方法
    -(void)setName:(NSString *)newName{
        name=newName;
    }
    //getter方法
    -(NSString *)name{
        return name;
    }
    //setter方法
    -(void)setHealth:(int)newHealth{
        health=newHealth;
    }
    //getter方法
    -(int)health{
        return health;
    }
    @end 

    Dog.h:类的声明

    #import <Foundation/Foundation.h>
    @interface Dog : NSObject   //声明类Dog,继承根基类NSObject
    //类的属性
    {
        NSString *name;
        int health;
    }
    //对象方法
    -(void)bark;
    -(void)setName:(NSString *)newName;         //setter方法
    -(NSString *)name;                          //getter方法
    -(void)setHealth:(int)newHealth;
    -(int)health;
    @end

    9.自动生成属性的存取方法

    ·@property语法

    ·@synthesize

    ·封装的好处:

    -过滤不合理的值

    -屏蔽内部的赋值过程

    -让外界不必关注内部的细节

    10.自动生成属性的存取方法实例

    main:

    #import <Foundation/Foundation.h>
    #import "dog.h"
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            //创建对象,即实例化对象
            Dog *haShiQi=[[Dog alloc]init];
            //方法调用
            [haShiQi bark];
            //属性赋值
            [haShiQi setName:@"哈士奇"];
            [haShiQi setHealth:120];
            NSLog(@"狗的姓名:%@ 健康状况:%d",haShiQi.name,haShiQi.health);
        }
        return 0;
    }

    Dog.m:类的实现

    #import "Dog.h"     //引用类的声明文件
    @implementation Dog
    //方法实现
    -(void)bark{
        NSLog(@"汪汪");
    }
    @synthesize name,health; //封装,代替了setter,getter
    @end

    Dog.h:类的声明

    #import <Foundation/Foundation.h>
    @interface Dog : NSObject   //声明类Dog,继承根基类NSObject
    //类的属性
    {
    @public;               //设置类的属性为公有
        NSString *name;
        int health;
    }
    -(void)bark;
    @property int health; //封装,代替了setter,getter
    @property NSString *name;
    @end

    11.方法重载

    ·OC中不是严格的函数重载

    命名冲突:

    -(int)doSomething(int)X;

    -(int)doSomething(float)X;

    命名冲突:

    -(int)doSomething(int)x:(int)y;

    -(int)doSomething(float)x:(int)y;

    不冲突:

    -(int)doSomething(int)x:(int)y;

    -(int)doSomething(int)x: andY:(float)y;

    因为一个是“doSomething:”,“另一个是doSomething::”

    12.继承

    ·不改变原来模型的基础上,拓充方法

    ·建立了类与类之间的联系

    ·抽取了公共代码

    ·减少冗余代码

    ·坏处:耦合性强

  • 相关阅读:
    如何让spring mvc web应用启动时就执行特定处理
    关联查询left join中on 和where 的区别
    c语言中'.'与'>'的区别
    申请博客园的计划
    java学习环境安装与配置
    ACM之旅之坎坷编译器
    2013年小结
    申请博客园的计划
    生命在于运动
    委托和事件
  • 原文地址:https://www.cnblogs.com/mcy0808/p/10913086.html
Copyright © 2011-2022 走看看