OC对象的动态和静态构造区别

摘要:
Student.h:#import @interface学生:NSObject@property(非原子,保留)NSString*name;@属性(非原子,赋值)intage;@EndStudent。m: #import“Student.h”@implementationStudent//操作

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

 1 #import <Foundation/Foundation.h>
 2 
 3 #import "Student.h"
 4 
 5 int main(int argc, const char * argv[])
 6 
 7 {
 8 
 9     @autoreleasepool {
10 
11         //动态方法需要手动释放内存
12 
13         Student *stu1= [[Student alloc] initWithAge:10];
14 
15         stu1.name = @"dingxiaowei";
16 
17         NSLog(@"%@",stu1);
18 
19         [stu1 release];
20 
21         //静态构造方法不需要你管理内存
22 
23         Student *stu2 =[Student studentWithAge:20];
24 
25         stu2.name = @"wangning";
26 
27         NSLog(@"%@",stu2);
28 
29     }
30 
31     return 0;
32 
33 }

  

结果:

OC对象的动态和静态构造区别 - 蓬莱仙羽 - 蓬莱仙羽

免责声明:文章转载自《OC对象的动态和静态构造区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IDEA 从Windows 过渡到Mac 必备快捷键对照小程序 之裁剪上传图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OC常用数据类型大全解

UI基础OC常用数据类型 Block Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:block是inline(内联函数)的,并且默认情况下它对局部变量是只读的 苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用...

android不依赖具体activity弹出Dialog对话框,即全局性对话框

最近在DialogUtil类中声明了一个静态的弹出Dialog方法,弹出的Dialog也是静态的,并且只在第一次进行创建,由于Dialog弹出依附于Activity,所以就出现了问题。 即:第一次调用可以弹出,第二次之后就不能弹出了。 解决:在创建Dialog时添加 dialog.getWindow().setType(WindowManager.Layo...

创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

  工厂方法模式:   定义:为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。   应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能; 创建过程比较复杂,例如需要初始化其他关联的资源类,读取配置文件等; 接口有很多具体实现或者抽象有很多具体子类时,你可能需要为客户代码写一大串 if-else 逻辑来...

设计模式之动态代理

在了解什么是动态代理模式,以及怎么实现动态代理模式之前,我们先明确一个场景,那就是当我们需要对一类实现类增加一些额外处理对其中的某些方法做一些增强时。譬如增加日志打印,参数校验,鉴权等。这些功能很重要,但是又具有一定的独立性(与业务代码不相关)。针对这种情况, 我们就可以采用动态代理模式来实现。 动态代理顾名思义,就是动态的对方法实现代理。要真正理解动态代...

Matlab中的静态文本框中显示多行内容

Matlab中的静态文本框中显示多行内容 有时候,我们在GUI中利用静态文本框显示程序的结果,但是结果很长,一行未必可以显示的开,而静态文本框不像edit或listbox那样通过滚动条来显示多行内容,即便设置了max和min属性也是一样的。 于是,怎么在静态文本框中显示多行是很有意义的: 解决方法,利用函数textwrap: figure('units'...

java之static变量与全局、局部变量的区别

static变量与全局、局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其...