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.继承

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

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

·抽取了公共代码

·减少冗余代码

·坏处:耦合性强

猜你喜欢

转载自www.cnblogs.com/mcy0808/p/10913086.html