黑马程序员 _6 OC基础 set get语法与点语法





---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

一、XCode帮助文档找到了下载的方法,

菜单栏Xcode->Preferences选择Documentation,在线下载


二  set和get方法的使用

因为如果成员变量被定义为@public,那么就可以被任意赋值,而没有声明@public,又要管理成员的访问,就要使用set方法和get方法.

1.set方法用来设置成员变量,get方法用来访问成员变量,返回成员变量的值,实际情况中可根据是否需要修改成员变量的值来使用set方法,是否需要获取变量的值使用get方法.

2.set方法与get方法的命名规范:

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

get方法与成员变量同名;

成员变量的命名规范:都以下划线_开头,可以与get方法区分开,可以与其他局部变量区分开.

代码:

#import <Foundation/Foundation.h>
// 声明
@interface Car : NSObject
{
    int _wheels; // 轮子个数
}
/*set方法*/
- (void) setWheels:(int)wheels;
/*get方法*/
- (int) wheels;
@end

@implementation Car
// set方法的实现
- (void) setWheels:(int)wheels
{
    // 对外面传进来的轮子数进行过滤
    if (wheels<=0)
    {
        wheels = 1;
    }
    
    _wheels = wheels;
}

// get方法的实现
- (int) wheels
{
    return _wheels;
}

set方法和get方法的使用,保证了程序的封装性,

而封装的好处是: 过滤不合理的值,屏蔽内部的赋值过程,让外界不必关注内部的细节。

三、类方法

类方法就是利用类名直接执行的方法,以+号开头。

与对象方法的区别:

1.以加号开头,而对象方法以-号开头;

2.只能用类名调用(所以要继承NS0bject);

3.类方法不能访问成员变量,对象方法可以;

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

另外类方法与对象方法不是一个类型,所以可以同名。


四、self关键字、

self类似于java中的this关键字,在OC中没有this关键字,利用self可以调用调用当前的变量或方法。

self->成员变量名 访问的是当前方法调用的成员变量,

[self 方法名] 调用相应的方法(类的调用类的,对象的调用对象的)。self代表着当前方法的调用者。

self在类方法中的调用

 @implementation Student
  + (void)test2 {
   }
    + (void)test3 {
      [Student test2];
      
     [self test2];
 }
 @end

self在对象方法的调用
@implementation Student
  - (void)test2 {
   }
  - (void)test3 {
      [self test2];
  }
 @end

五、点语法的应用

传统的set/get方法,较为繁琐,OC中提供了点语法来等价于set/get方法,

Student *stu = [Student new];  
[stu setAge:100];  
int age = [stu age];  
利用点语法
stu.age=100;  
int age = stu.age;  
编译器会自动将点语法的方法展开为相应的set/get方法。

六、@property与@synthesize来替换set/get方法

@property用在.h文件@interface内,可以实现set/get的声明。

@synthesize在.m文件@implementation中实现set/get的实现

@propertyintage( 等价于

- (int)age;   // getter

- (void)setAge:(int)age;  // setter

@synthesizeage = _age等价于

- (int)age{

  return_age;

}

- (void)setAge:(int)age{

  _age= age;

}

//1.注意 @synthesize age = _age; 如果变量age不存在,会自动生成一个@private的成员变量_age

//2.Xcode4之后,@property包括了@synthesize的功能,以后只要在.h文件中声明@property就可以完全替换setter和getter。




---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值