OC语言day06-02-1自动释放池大对象问题

pragma mark 自动释放池大对象问题

pragma mark 概念

pragma mark 代码

AppDelegate.h

#import 

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;

@end

AppDelegate.m

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    return YES;

}

@end


ViewController.h

#import 

@interface ViewController : UIViewController

@end

ViewController.m

#import "ViewController.h"

#import "Person.h"

@interface ViewController ()



@end



@implementation ViewController



- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

#warning 1. 不要在自动释放池中使用比较消耗内存的对象,占用内存比较大的对象

    /*

    @autoreleasepool {

        Person *p = [[[Person alloc]init]autorelease];

        

        

        // 假如p 对象只在100行的地方使用, 以后都不用了

        

        // 一万行代码

    }

     */

    

#warning  2. 尽量不要再自动释放池中使用循环, 特别是循环的次数非常多,并且还非常占用内存

    /*

    @autoreleasepool {

        

        for (int i = 0; i < 99999; ++i) {

            //每调用一次都会创建一个新的对象

            // 每个对象都会占用一块存储空间

            Person *p = [[[Person alloc]init]autorelease];

        }

    }// 只有执行到这一行,所有的对象才会被释放

     */

    

#warning  3.解决创建多个对象占用内存的问题

    /*

    for (int i = 0; i<99999; ++i) {

        @autoreleasepool {

            Person *p = [[[Person alloc]init]autorelease];

        }

    }// 执行到这一行, 自动释放池就释放了

     */

    NSLog(@"------------------------");

}



@end



你可能感兴趣的:(OC语言day06-02-1自动释放池大对象问题)