对象的动态和静态构造创建的区别

Student.h:

#import <Foundation/Foundation.h>

@interface Student : NSObject

@property(nonatomic,retain) NSString * name;

@property(nonatomic,assign) int age;

@end

Student.m:

#import "Student.h"
@implementation Student
//动态方法,在main函数中类alloc了之后调用,但是要手动管理内存,要手动释放
-(id) initWithAge:(int)age{
    if (self == [super init]) {
        _age = age;
    }
    return self;
}

//静态构造方法,在main函数中不需要你手动管理内存释放
+(id)studentWithAge:(int)age{
    Student *stu = [[[Student alloc] init] autorelease];\
    stu.age = age;
    return stu;
}

-(NSString *)description{
    return [NSString stringWithFormat:@"name:%@ age:%i创建了",_name,_age];
}

-(void)dealloc{
    NSLog(@"name:%@ age:%i被释放了",_name,_age);
    [_name release];
    [super dealloc];
}
@end

main:

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

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

{
    @autoreleasepool {

        //动态方法需要手动释放内存

        Student *stu1= [[Student alloc] initWithAge:10];

        stu1.name = @"dingxiaowei";

        NSLog(@"%@",stu1);

        [stu1 release];

        //静态构造方法不需要你管理内存

        Student *stu2 =[Student studentWithAge:20];

        stu2.name = @"wangning";

        NSLog(@"%@",stu2);

    }

    return 0;
}

时间: 2024-08-26 10:38:24

对象的动态和静态构造创建的区别的相关文章

c++-C++对象声明而不立即创建

问题描述 C++对象声明而不立即创建 c++怎样只声明而不立即创建对象(不是对象指针)?如A instance,而不是A* pInstance 解决方案 其实,C++中只要你声明一个那系统就是在相应分配堆栈,只要不new,那就不会构造 解决方案二: 你不用new去分配空间就好了 解决方案三: 你想多了,因为类相当于一个结构体,所以你必须要知道它的地址,所以必须要有指针指明,还有你声明与定义弄清楚了么 解决方案四: 你定义了,C++就会构造对象了.A instance 这就创建了一个栈上对象.只有

Intent传递对象之Serializable和Parcelable的区别

Intent在不同的组件中传递对象数据的应用非常普遍,大家都知道在intent传递对象的方法有两种:1.实现Serializable接口.2.实现Parcelable接口. Android中Intent传递对象的两种方法Serializable,Parcelable请点击了解详情. 为什么要将对象序列化? 1.永久性保存对象,保存对象的字节序列到本地文件中: 2.用过序列化对象在网络中传递对象: 3.通过序列化对象在进程间传递对象. 1.实现Serializable接口 Serializable

WCF后续之旅(10) 通过WCF Extension实现以对象池的方式创建Service Instance

我们知道WCF有3种典型的对service instance进行实例化的方式,他们分别与WCF的三种InstanceContextMode相匹配,他们分别是PerCall,PerSession和Single.PerCall为每次service invocation创建一个新的service instance; 而PerSession则让一个service instance处理来自通过各Session(一般是同一个proxy对象)的调用请求:而Single则是用同一个service instanc

Java千百问_06数据结构(015)_数组和普通对象的引用变量有什么区别

1.数组和普通对象的引用变量有什么区别 了解什么是数组看这里:java中的数组是什么  对于Java的数组来说,只有类型兼容(即属于同一数据类型体系且遵守优先级由低到高原则),才能将数组引用传递给另一数组引用,但仍然不能改变数组长度(仅仅只是调整数组引用指针的指向).  了解数组传递看这里:数组如何传递 public class TestArrayLength { public static void main(String[] args) { int[] numbers = { 3, 5, 1

《ActionScript 3.0基础教程》——第2章 往舞台动态地添加对象2.1 创建库资源,并为它命名

第2章 往舞台动态地添加对象 现在你已经学会了如何操作舞台上已有的对象,接下来你将学习如何使用ActionScript动态地往舞台添加存放在库中的对象. 与前一章的区别是,你将要操作的对象还没有被放到舞台上.当程序编译成SWF以后,你将使用ActionScript动态地往舞台中添加来自库中的对象. 2.1 创建库资源,并为它命名 你应该还记得,如果要访问舞台上对象的属性,你需要为对象取一个名字,这样ActionScript才能引用它.当你从库中往舞台添加对象时,同样需要为对象取一个唯一的名字,同

javascript转换字符串为dom对象(字符串动态创建dom)_javascript技巧

前言: 在javascript里面动态创建标准dom对象一般使用: var obj = document.createElement('div'); 然后再给obj设置一些属性. 但是,在实际使用过程中,有些人可能会想,要是能这样创建标准的dom对象就好了 伪代码:var obj=strToDom('<div id="div_1" class="div1">Hello World!</div>'); 那么今天的目的就是教大家怎么去实现一个这样

javaScript对象和属性的创建方法_基础知识

复制代码 代码如下: 1.创建一个空对象:var o =new object(); 2.创建对象直接量:    var cricle={x:0,y:0,radius:2}    var homer={                         name:"Homer Simpson",                         age:34,                         married:true,                         emai

正确认识对象数据库与关系数据库之间的区别

面向对象数据库系统 面向对象数据库系统(Object Oriented Data Base System,简称OODBS)是数据库技术与面向对象程序设计方法相结合的产物. 对于OO数据模型和面向对象数据库系统的研究主要体现在:研究以关系数据库和SQL为基础的扩展关系模型:以面向对象的程序设计语言为基础,研究持久的程序设计语言,支持OO模型:建立新的面向对象数据库系统,支持OO数据模型. 面向对象程序设计方法是一种支持模块化设计和软件重用的实际可行的编程方法.它把程序设计的主要活动集中在建立对象和

IOS中类和对象还有,nil/Nil/NULL的区别

类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. 类与对象是抽象与具体的关系. 类其实就是一种数据类型,它的变量就是对象. 类与类之间的关系--继承关系 A是B 如果这句话说的通,在设计程序的时候就可以看成是继承关系. 例如:学生与小学生 小学生也是学生,所以学生是小学生的父类,小学生是学生的子类. oc与面向对象 对象是oc程序的核心."万事万物皆对象"是程序中的核心思想. 类是用来