hello,world不使用ARC

main.m

//
//  main.m
//  Hello
//
//  Created by lishujun on 14-8-28.
//  Copyright (c) 2014年 lishujun. All rights reserved.
//

#import <UIKit/UIKit.h>

// 视图控制器对象
@interface HelloWorldViewController : UIViewController
@end

@implementation HelloWorldViewController

-(void) loadView
{
    /*
     self.view = contentView;
     [self setView contentView];
     等价,设置属性其实是调用set方法
     */

    //创建视图对象
    UIView *contentView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    NSLog(@"new contentView : %d", [contentView retainCount]);  // new contentView : 1
    contentView.backgroundColor = [UIColor lightGrayColor];
    NSLog(@"set contentView : %d", [contentView retainCount]);  // set contentView : 1
    [self setView: contentView];
     NSLog(@"add contentView : %d", [contentView retainCount]); // add contentView : 2

    //创建label对象
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 30.0)];
    NSLog(@"new label : %d", [label retainCount]);              // new label : 1
    label.text = @"Hello World";
    label.center = contentView.center;
    label.textAlignment = UITextAlignmentCenter;
    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor redColor];
    NSLog(@"set label : %d", [label retainCount]);              // set label : 1

    //在视图上添加label
    [contentView addSubview:label];
    NSLog(@"add label : %d", [label retainCount]);              // add label : 2
    [label release];
     NSLog(@"release label : %d", [label retainCount]);         // release label : 1

}

@end

// 委托对象
@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate>
{
    IBOutlet UIWindow *window;
}

@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) HelloWorldViewController *viewController;
//window 必须声明为属性,声明为局部变量则无法绘制视图,显示为黑屏
//apple 官方文档把viewController也声明为属性了
@end

@implementation HelloWorldAppDelegate

@synthesize window;
@synthesize viewController;

-(void) applicationDidFinishLaunching:(UIApplication *)application
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen]bounds]];
    self.viewController = [[HelloWorldViewController alloc]init];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
}

@end

// 程序入口
int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, @"HelloWorldAppDelegate");
    }
}

输出:

2014-08-30 11:47:30.980 HelloNOARC[562:60b] new contentView : 1
2014-08-30 11:47:30.983 HelloNOARC[562:60b] set contentView : 1
2014-08-30 11:47:30.984 HelloNOARC[562:60b] add contentView : 2
2014-08-30 11:47:30.985 HelloNOARC[562:60b] new label : 1
2014-08-30 11:47:30.986 HelloNOARC[562:60b] set label : 1
2014-08-30 11:47:30.986 HelloNOARC[562:60b] add label : 2
2014-08-30 11:47:30.987 HelloNOARC[562:60b] release label : 1
时间: 2024-08-08 21:56:18

hello,world不使用ARC的相关文章

ARC

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了. 该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能.简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码.有一点,ARC并不是G

Block的引用循环问题 (ARC &amp; non-ARC)

Block实现原理 首先探究下Block的实现原理,由于Objective-C是C语言的超集,既然OC中的NSObject对象其实是由C语言的struct+isa指针实现的,那么Block的内部实现估计也一样,以下三篇Blog对Block的实现机制做了详细研究: A look inside blocks: Episode 1 A look inside blocks: Episode 2 A look inside blocks: Episode 3 虽然实现细节看着头痛,不过发现Block果然

MRC与ARC混合开发配置

iOS4.1后,默认为ARC模式,ARC实质上通过编译器特性实现的,只需简单修改下文件配置即可实现. 1.要切换至MRC需要选中当前Project,选择Build Settings,查询框内键入auto,查找到Objective-C Automatic Reference Counting ,将YES选成NO即可.见下图: 2.还可以灵活选择单一或几个文件设置成ARC模式,方法是选择targets,找到Compile Sources,选择所需文件,将flags ,键入-fobjc-arc即可.见

iOS ARC机制

iOS提供了ARC功能,很大程度上简化了内存管理的代码. 1.ARC的本质: 采用ARC后,iOS开发者完全可以抛弃之前繁琐的内存管理机制.在开启ARC的情况下,编译器会自动的在程序的正确位置隐式的插入retain,release和autorelease等.特别明确,ARC只是objective-C编译器的特征,所有ARC相关处理都会发生在构建应用程序的时候,这和内存垃圾回收机制不同. 2.基本的ARC使用规则 1)代码中不能使用retain,release,autorelease等: 2)不能

黑马程序员--ARC

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- ARC的判断准则:只要没有强指针指向的对象,就会释放对象 ARC特点: 1>不允许调用release,release,retainCount 2>允许重写dealloc,但是不允许调用[super dealloc] 3>@property的参数 * strong :成员变量时强指针,(适用于OC对象类型) * weak :  成员变量是若指针,(适用于OC对象) * assign: 适

iOS ARC与MRC混编的一些解决方法

1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MRC的程序添加-fno-objc-arc标记,表明在编译时,该文件使用MRC编译 备注: (1) 演示中使用的RegexKitLite还需要导入libicucore.dylib动态库 (2) 如果要在MRC项目中添加ARC的文件,可以使用 -fobjc-arc 标记即可 3> 将MRC的第三方库直接编译成

关闭xCode项目的ARC设置

 ARC forbids explicit message send of 'release' 'release' is unavailable: not available in automatic reference counting mode 今天,遇到了这么样的问题. 很显然,是ARC的问题. 错误原因:因为我们设置了用ARC来管理内存释放,我们却又调用了release方法去释放对象. ARC是什么?(我也贴一段网上的简短说明) ARC是iOS 5推出的新功能,全称叫 ARC(Autom

Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础

结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 十六.内存管理相关知识(二) 1.autorelease,自动释放机制 - (instancetype)autorelease; (1)自动释放池的创建 iOS5.0之前 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //进行一系列操作 //此处不可以使用

基于Java的Arc Engine二次开发的环境的配置

1.软件准备 ArcGIS for Desktop 10.2, Arc engine, jdk-7u60-windows-i586,Eclipse Mar2 2.软件的安装 2.1 ArcGIS for Desktop 10.2的安装 软件的下载:ArcGIS for Desktop 10.3全套的下载:http://pan.baidu.com/s/1o7F4yue,附带破解方法 本文使用的是10.2,其下载路径与安装破解方法如:http://jingyan.baidu.com/article/

设置ARC有效或者无效

在编译单位上,可以设置ARC有效或者无效.比如对每个文件可以选择使用或者不使用ARC,一个应用程序中可以混合ARC有效或者无效的二进制形式. 设置ARC有效的编译方法如下所示:(Xcode4.2开始默认设定对所有文件ARC有效) *使用clang(LLVM编译器)3.0或以上版本 *指定编译器属性为"-fobjc-arc" 设置ARC有效或者无效,一般两种方式:对所有文件统一操作.对部分文件操作. 1.对所有文件统一操作 需求:有的编程人员为了能更好的理解内存管理机制,刻意将编译器指定