黑马程序员_OC学习之点语法

------- IOS培训android培训、期待与您交流! ----------
不管是在Java中还是在C#中这些面向对象的语法,我们经常使用对象.成员变量的方式,来很方便的操作。

也许是为了让更多地习惯这种操作的程序员们,OC中也引入了点语法。

@property有以下几种属性

readwrite 默认

assign 默认

readonly 只读(只有get方法,禁用set方法) 

给setter和getter方法起别名(setter = a:, getter = b)

atomic  开启多线程变量保护,会消耗一定的资源(非原子性,保证多线程安全)

nonatomic:禁止多线程变量保护,提高性能 

assign:直接赋值,适用于基本数据类型(非对象类型)

retain:赋值时做内存优化,使用于对象类型

copy:复制一个副本,适用于特殊的对象类型(常用于NSstring)(有NSCoping协议的才可以用copy)


1.先来看一下刚刚学习时,我们经常见到的代码:

 

类的声明:

#import <Foundation/Foundation.h>

@interface Cat: NSObject {    

 int age;

 }
- (void)setAge:(int)newAge; 


 - (int)age;


@end

 

类的实现:

 

#import "Cat.h"

 @implementationCat

 - (void)setAge:(int)newAge {


   age = newAge;


}

- (int)age {

    return age;
}

@end

 

在通常情况下,我们在Main函数中经常如下使用:

#import <Foundation/Foundation.h>
#import "Cat"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Cat *cat= [[Catalloc] init];
       
        // 设置age的值
        [cat setAge:10];
       
        // 取出age的值
        int age = [cat.age];
       
        NSLog(@"age is %i", age);
        
    }
    return 0;
}

 

2. 其实我们不必这样麻烦,点语发,是可以代替上面的功能的,代码如下:

 

#import <Foundation/Foundation.h>
#import "Cat"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Cat *cat= [[Catalloc] init];
       
        // 设置age的值
        cat.setAge=10;
       
        // 取出age的值
        int age = [cat.age];
       
        NSLog(@"age is %i", age);
        
    }
    return 0;
}

 

这样应该看起来很亲切了吧,但是这种用法,是和上面Java以及C#中原理是不一样的。

这只是看起来像而已

OC点语法的本质是方法调用,不是直接访问成员变量。

如下分析,当使用点语法是,其实OC是将 左边的转换为右边的

cat.setAge=10;        ------->        [cat setAge:10];

 

int age = [cat.age];  ------->   int age = [cat.age];

 

所以,我们应该记清楚,这用点语法,仅仅是方便我们使用而已。

 

3.需要注意一点的是,当self和 . 有时在一起使用时会遭成死循环。

例如:

- (void)setSpeed:(int)newSpeed  

{      

       self.speed = newSpeed;  

}  

其实他会展开为:

[self setSpeed: newSpeed]

这样是不是就很明显了呢?

 





 

------- IOS培训android培训、期待与您交流! ----------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值