Object-C学习笔录(二)面向对象

来源:互联网 发布:淘宝百度快照优化 编辑:程序博客网 时间:2024/05/18 19:22

最近思路混乱了,一边要维护Android客户端;一边又要赶紧学OC维护IOS客户端;不多说了;下面先上提纲:


1.Object-C中类的定义

2.对象初始化:

3.方法以及方法调用

4.成员变量

5.合成getter/setter方法;


1.Object-C中类的定义

OC中所有的类默认继承NSObject基类

OC中类的定义包含两个部分:接口部分和实现部分,分别用一个"类名.h"文件和一个"类名.m"文件保存。

接口部分声明:

@interface User : NSObject

{

    NSString*name;

    NSString*identifier;

    NSInteger age;

}

-(id)initWithName:(NSString*)name identifier:(NSString*)ident age:(NSInteger)age;//自定义的对象初始化方法,一般约定俗成使用init开头

-(void)test;

+(void)test2;

@end


实现部分:

#import "User.h"


@implementation User

{

    NSString*pass;//在实现部分声明的变量默认为private权限

}

-(id)initWithName:(NSString *)n identifier:(NSString *)ident age:(NSInteger)a{

    if(self=[superinit]){

        self->name=n;

        self->identifier=ident;

        self->age=a;

    }

    NSLog(@"实现接口部分声明的对象初始化方法");

    return self;

}

-(void)test{

    NSLog(@"实现接口部分声明的实例对象方法 %@",self->name);

}

+(void)test2{

    NSLog(@"实现接口部分声明的类方法 %@",self->name);

}

//类实现部分自定义的方法,权限只能被当前的类使用,外部无法使用,对外部为不可见性

-(NSString*)text{

    return@"Andy";

}

@end


2.对象初始化:

注意:Object-C中所有类的实例都是指针;


例如:User* user;//声明一个对象指针变量

user=[[User alloc]init];

关于init方法是Object-C类的默认初始化方法

或者使用user=[User new];

关于new方法也是Object-C默认的初始化方式

或者我们使用自己的初始化方法,user=[[User alloc] initWithName:@"Andy" identifier:@"4509234222222" age:27];


3.方法以及方法调用

Object-C中只有实例方法和类方法两种区别

以减号(➖)开头的方法都是实例方法;以加号(➕)开头的方法都是类方法

接口部分声明的方法对外部是可见的,也就是说外部可以调用;而类实现部分自定义的方法,权限只能被当前的类使用,外部无法使用,对外部为不可见性

在Object-C里面方法不能独立存在,必须属于某个类或者对象

方法调用,例如:

[user test];//调用实例方法

[User test2];//调用类方法


4.成员变量

Object-C中类的成员变量都是实例变量,Object-C中不支持真正的类变量;但是可以通过static修饰的全局变量可以模拟类变量

接口中@private 修饰的成员变量,只能被当前类访问;接口中声明的属性变量默认为@protected;被@protected修饰的成员变量,只能提供当前类及其子类可以使用,对非继承关系的外部是不可见的,若想声明一个属性变量为外部可见,则使用@public;或者@package;

@public表示所有外部文件都可以使用;即可见性指向所有外部文件;@package则是当前包内可见。


5.合成getter/setter方法;

合成getter/setter方法只是提供编程便利性,使程序员可以少写一点代码;

Object-C提供@property,@synthesize关键字修饰成员变量,使得系统会自动为该变量合成getter/setter方法;只要在类的接口部分声明变量时使用@property关键字修饰,在类的实现部分用@synthesize修饰对应变量即可;系统会默认合成setXxx的setter方法和xxx的getter方法;

例如

@interface User: NSObject

@property(nonatomic)NSString *name;

@property(nonatomic)NSString *pass;

@property(nonatomic)NSInteger age;

@end

如上的代码,系统会自动为name属性合成名为setName:(NSString* _name)的setter方法和名为name的getter方法,只管调用就是了。通过@property修饰的成员变量还可以通过“对象实例.属性”点语法方式获取属性值,或者赋值;其实点语法也是通过调用setter/getter实现的。


今天先写到这里,下一篇应该记录一下Object-C的KVC和KVO方式操作对象属性变量。


0 0