Static NSArray of strings - how/where to initialize in a View Controller

前端 未结 9 1937
甜味超标
甜味超标 2020-12-12 21:16

In a Master-Detail app I\'d like to display a TableView with 5 sections titled:

  1. Your Move
  2. Their Move
  3. Won Games
  4. Lost Games
  5. O
9条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-12 21:44

    I wonder, if the following would be a good way (answering my own question):

    #import "MasterViewController.h"
    #import "DetailViewController.h"
    
    static const NSArray *_titles;
    
    @interface MasterViewController () {
        NSMutableArray *_objects;
        NSMutableArray *_yourMove;
        NSMutableArray *_theirMove;
        NSMutableArray *_wonGames;
        NSMutableArray *_lostGames;
        NSMutableArray *_options;
    }
    @end
    
    @implementation MasterViewController
    
    + (void)initialize
    {
        // do not run for derived classes
        if (self != [MasterViewController class])
            return;
    
        _titles = @[
            @"Your Move",
            @"Their Move",
            @"Won Games",
            @"Lost Games",
            @"Options"
        ];
    }
    

    This way the const NSArray is initalized once and right before I need it (in the MasterViewController class). And the self check prevents this method from running again - when some inheriting class does not implement its own +initialize method.

提交回复
热议问题