美文网首页
OC语言day06-02-1自动释放池大对象问题

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

作者: liyuhong165 | 来源:发表于2016-06-15 23:13 被阅读26次

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

    pragma mark 概念

    pragma mark 代码

    AppDelegate.h

    #import <UIKit/UIKit.h>
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @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 <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    
    @end
    
    

    ViewController.m

    #import "ViewController.h"
    
    #import "Person.h"
    
    @interface ViewController ()
    
    
    
    @end
    
    
    
    @implementation ViewController
    
    
    
    - (void)touchesBegan:(NSSet<UITouch *> *)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自动释放池大对象问题

          本文链接:https://www.haomeiwen.com/subject/evcmdttx.html