OC 对象和匿名对象

OC 对象和匿名对象

对象和匿名对象的定义:

当new出一个对象时,如果用一个指针接收这个对象,那么这个指针通常被称为对象。
如果new出的对象,不用指针接收,那么这个对象就称为匿名对象。

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

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

    //1.通过指针访问对象
    Iphone *ip =  [Iphone new];     // 创建一个对象,并用指针ip接收
    ip->_size = 4.3;  //这种是指针访问结构体成员变量的专用写法。OC的对象都是指针,存储着堆中的一块内存地址。
    ip.weight = 10;        // 通过点语法来访问对象的成员变量
    [ip powerOff];      // 通过指针来访问对象的方法

    //2. 匿名对象,无指针
    [Iphone new]; // 这里创建了一个对象,但是这个对象并没有用指针来接收,这个对象就是匿名对象

     注意:每次创建一个匿名对象,都会给这个对象分配不同的存储空间,也就是说每个匿名对象都不相同。
     //3.没有两个相同的匿名对象
    [Iphone new]->_cpu = 5;   // 给第1个匿名对象_cpu赋值
    [Iphone new]->_size = 4.0; //给第2个匿名对象_size赋值
    [Iphone new]->_weight = 15; //给第3个匿名对象_weight赋值
    [[Iphone new] powerOff];  //调用第4个匿名对象powerOff方法
    NSLog(@"%@",[Iphone new]); //打印第5个匿名对象

     //猜猜看,这里打印的结果全为0。
     //原因是每次赋值时,都创建了新的匿名对象,NSLog打印的是一个新的匿名对象,它的成员变量并没有赋值。所以都为0。

   //4. 匿名对象可以作为实参进行传递
    Person *p = [Person new];
    Iphone *ip = [Iphone new];
    [p sendSignal:ip];    //这里是通过指针,作为实参传递

    [p sendSignal:[Iphone new]];//这里是使用匿名对象,作为实参传递,但是[Iphone new]对象在这次使用之后就会被销毁,除非有新的指针引用它。

    return 0;
}
时间: 2024-12-14 10:53:28

OC 对象和匿名对象的相关文章

面向对象、匿名对象、构造方法

1. 类和对象的关系 :类是对同一类事物(对象)的抽象,对象实际存在的该类的各种实体. 2. 面向对编程的核心:找合适的对象来做合适的事. 3. java中如何来找到对象: (1).sun自己定义好的类,必须知道这个类. (2).自定义类,通过自定义的类来出创建对象. 4. 类的格式 : class 类名 { //1.属性(成员变量) :描述对象的公共特性.. //2.方法 :描述对象的公共行为. } 如何通过类创建对象: 类名对象名 = new  类名(); 5. 匿名对象 :没有名字对象 匿

this/super/static/final/匿名对象/继承/抽象类/访问权限修饰符

1.this关键字的作用     1)调用本类中的属性;     2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用     3)表示当前对象; 2.匿名对象     直接new出来的对象,不创建变量名,且只能使用一次,通常作为方法的参数及返回值使用 3.继承     继承是面向对象的三大特征之一,通过关键字:extends实现,被继承的类称为父类(也称作基类/超类),实现继承的类称为子类(也称作派生类).     特点:     (1)通过继承,子类可以直接访

黑马程序员 11-OC匿名对象

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— 匿名变量:利用类创建一个对象的时候,没有将对象的地址交给一个指针变量保存,这样的对象称为匿名对象,即没有指针指向的对象. //匿名变量 1 #import <Foundation/Foundation.h> 2 //类的声明 3 @interface Car : NSObject 4 { 5 @public//表示允许外界指针间接访问对象的成员变量 6 int _speed;//速度 7 } 8 //方法

匿名对象,封装,构造代码块、静态代码块、内部类、匿名内部类

匿名对象:没有引用类型变量指向的对象就称为匿名对象. 匿名对象的主要作用:简化书写 匿名对象主要用于两种应用场景: 1.如果一个对象的方法只会调用一次的时候,然后该对象就不再使用了,这时候就可以使用匿名对象 2.作为参数传递 封装的步骤: 1.私有化要封装的属性 2.根据需求提供对应的get或set方法 封装的好处: 1.提高了数据的安全性 2.操作简单 3.隐藏了实现 封装一定会用上的场景:如果是实体类的属性,在开发过程中,全部都会封装起来 构造代码块:创建一个对象的时候,给对象进行统一的初始

关于JAVA中的匿名对象

/* 匿名对象:就是没有名字的对象. 匿名对象的应用场景: A:调用方法,仅仅只调用一次的时候. 注意:调用多次的时候,不适合. 那么,这种匿名调用有什么好处吗? 有,匿名对象调用完毕就是垃圾.可以被垃圾回收器回收. B:匿名对象可以作为实际参数传递 */ class Student { public void show() { System.out.println("我爱学习"); } } class StudentDemo { public void method(Student

C++中引用和匿名对象的理解和本质剖析

引用是什么? 引用其实就是给变量起的一个别名,使用这个别名跟使用变量名没有区别. 那什么又是变量名呢? 变量名实质上是一段连续存储空间的别名,是一个标号(门牌号),编译器通过变量来申请并命名内存空间,程序员可以通过变量的名字可以使用存储空间. 也可以这样理解,变量名是逻辑概念,变量是物理层面,变量含数据类型和数据值,数据类型决定内存的分配,编译器将变量名和变量对应的内存联系起来,使程序员可以通过变量名来操作内存. 引用怎么用?    语法:Type& name = var; 规则:1.普通引用在

匿名对象与非匿名对象的区别

类封装完以后就可以通过使用new关键字和类的构造方法来创建对象,这种对象分为两种:匿名对象与非匿名对象.何为匿名对象,何为非匿名对象呢?举个例子:假如有如下类: package com.heima.vo; public class Student{                    private String name="lisi";                    private int age=12;                    public void pri

匿名对象及回收机制

一.什么匿名对象 Class A{ .... }; A* a = new A;//a是对象 new A;//在内存中生成的对象没有任何指针或者引用指向,这就是匿名对象,匿名对象在作用块结束之后就没gc回收 二.匿名对象的使用 以QTableWidget举例,给某个item设置内容,用的是: 第三个参数是QTableWidgetItem指针,所以可以使用传一个匿名对象进去,然后在这个函数内部,会将item的参数存下来用于显示,然后作用块结束之后, 匿名对象内存被回收. ui.tableWidget

对于匿名对象,内部类这块的理解

一,匿名对象 1.什么是匿名对象以及匿名对象的使用环境 平常我们所实例化的对象可以重复使用,但是匿名对象,因为没有变量名所以只能使用一次,总的来说,匿名对象真实存在,但我们却无法明确的指出他来,所以他只能在创建之初使用一次. 使用环境:当我们想要通过一个对象仅仅调用一次某个方法时我们就可以使用匿名对象,局限性较大,用的不好就会造成代码量比不用还多的情况 2.格式(通过代码来看看使用正常对象和匿名对象之间的不同之处) package it.cast.demo10; public class Rai