小白学开发(iOS)OC_匿名对象(2015-07-24)

来源:互联网 发布:plc模块化编程实例 编辑:程序博客网 时间:2024/06/09 23:03
 //
//  main.m
//  匿名对象
//
//  Created by admin on 15/7/24.
//  Copyright (c) 2015年 admin. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Iphone.h"
#import "Person.h"

int main(int argc, const char * argv[]) {

/*
    1. 匿名对象
    
        > 当new出一个对象时,如果用一个指针接收这个对象,那么这个指针通常被称为对象
          而new出的对象,不用指针接收,那么这个对象就称为 匿名对象
*/
    Iphone *ip =  [Iphone new];     // 创建一个对象,并用指针接收
    ip->_cpu = 4;
    ip->_size = 4.3;                // 通过指针来访问对象的成员变量
    ip->_weight = 10;
    [ip aboutMyPhone];              // 通过指针来访问对象的方法
    
    [Iphone new]; // 这里创建了一个对象,但是这个对象并没有用指针来接收,这个对象就是匿名对象
    
//  注意:每次创建一个匿名对象,都会给这个对象分配不同的存储空间,也就是说每个对象都不从相同
//  例如:
    [Iphone new]->_cpu = 5;         // 通过匿名对象直接给对象成员变量赋值
    [Iphone new]->_size = 4.0;
    [Iphone new]->_weight = 15;
    [[Iphone new] aboutMyPhone];    // 通过匿名对象直接调用对象方法

//  但是 这里打印的结果全为0, 原因是每次赋值时,都创建了新的匿名对象,而最后一个调用对象方法的匿名对象,它的成员变量并没有赋值。所以创建的时候初始化都为0.因此打印结果都为0.
    
/*
    2. 使用场景:
             > 当对象方法只调用一次的时候
*/
    
//  3. 匿名对象可以作为实参进行传递
    Person *p = [Person new];
    
    Iphone *ip1 = [Iphone new];
    
    [p sendSignal:ip1];         // 这里是通过指针,作为实参传递
    
    [p sendSignal:[Iphone new]];//  这里是使用匿名对象,作为实参传递
    
    return 0;

}

 //
//  Iphone.h
//  匿名对象
//
//  Created by admin on 15/7/25.
//  Copyright (c) 2015年 admin. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Iphone : NSObject
{
    @public
    int _cpu;
    float _size;
    int _weight;
}
- (void)aboutMyPhone;

- (void)brand;

- (void)callWithNumber:(NSString *)number;

@end


//
//  Iphone.m
//  匿名对象
//
//  Created by admin on 15/7/25.
//  Copyright (c) 2015年 admin. All rights reserved.
//

#import "Iphone.h"

@implementation Iphone

- (void)aboutMyPhone
{
    NSLog(@"cpu = %d, size = %.1f, weight = %d", _cpu, _size, _weight);
}

- (void)brand
{
    NSLog(@"苹果手机");
}

- (void)callWithNumber:(NSString *)number
{
    NSLog(@"打电话给 %@", number);
}
@end

//
//  Person.h
//  匿名对象
//
//  Created by admin on 15/7/25.
//  Copyright (c) 2015年 admin. All rights reserved.
//

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

@interface Person : NSObject

- (void)sendSignal:(Iphone *)iphone;

@end

//
//  Person.m
//  匿名对象
//
//  Created by admin on 15/7/25.
//  Copyright (c) 2015年 admin. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)sendSignal:(Iphone *)iphone
{
    [iphone callWithNumber:@"10086"];
}
@end

0 0