<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【iOS - 月總結】開發中遇到的小知識點(2020.04)

      1.實時監聽數組的變化

      前幾天有一個需求在列表編輯界面需要實時根據選擇的數據進行下面各種按鈕不同狀態的切換,這就需要我們實時監聽數組的變化。

      // 第一步 添加監聽
      //監聽selectDataArray數量是否發生變化
       [self addObserver:self forKeyPath:@"selectDataArray" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
       
       // 第二步 在觀察者方法中監聽
      #pragma mark - 觀察者監聽 選中數組變化
      - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
          if ([keyPath isEqualToString:@"selectDataArray"]) {
              // 做你想做的操作
          }
      }
      
      // 做到這里你會發現直接addObject或者removeObject不起作用。所以我們應該這樣添加和修改數組中的數據
      [[self mutableArrayValueForKey:@"selectDataArray"] addObject:indexPathM];
      [[self mutableArrayValueForKey:@"selectDataArray"] removeAllObjects];
      

      2.NSArray和NSMutableArray的賦值

      在開發中,我們也經常遇到這樣的問題,在別的類中聲明了一個可變數組的屬性,然后在賦值的時候我們把不可變數組賦值過去。一般來說這樣會有警告,我們很有可能就忽略了。但是這樣會有一個問題,NSArray賦值給NSMutableArray那么數組就會變成不可變數組,我們對數組進行操作的時候就會崩潰。同理NSMutableArray賦值給NSArray那么數組就會變成可變數組。這個問題也是面試中會問到的一個問題,應該多多注意

      3.去除警告

      已有詳細博客,請參考

      4.oc中參數可為空或不可為空的方法和block作為參數可為空獲不可為空

      //參數可為空
      - (void)testMethod2:(NSString *_nullable)str;
      //參數不可為空
      - (void)testMethod2:(NSString *_Nonnull)str;
      
      
      //調用該方法時block可賦值為空[self testMethod:nil];
      - (void)testMethod:(void(^ _nullable)(void))handle;
      
      //調用該方法時block不可以可賦值為空[self testMethod:nil];
      - (void)testMethod:(void(^ _Nonnull)(void))handle;
      

      5.xib創建的Controller的View初始值就是(600,600)

      xib創建的Controller的View初始值就是(600,600), 你可以在viewWillAppear方法中添加創建的HUD, 或者是在viewDidLoad中設置

      // View的Frame: 
      self.view.frame = [UIScreen mainScreen].bounds;
      

      6.取模型數組內屬性組成新的數組

       NSArray *array = @[@{
                                 @"name":@"zhang",
                                 @"idStr":@"11"
                              },
                             @{
                                @"name":@"li",
                                @"idStr":@"12"
                             },
                             @{
                                @"name":@"wang",
                                @"idStr":@"13"
                             },
                             @{
                                @"name":@"zhao",
                                @"idStr":@"14"
                             }
          
          ];
          NSArray *newArray = [array mutableArrayValueForKeyPath:@"name"];
          
      // 結果
      /*
      Printing description of newArray:
      <NSKeyValueSlowMutableArray 0x600002a415c0>(
      zhang,
      li,
      wang,
      zhao
      )
      */
      這樣會得到name字段屬性值組成的數組
      

      類似的還有MJExtension里面的方法,這里面更加完善。他可以設置一些忽略值,在大數據字典中我們可以直接忽略一些然后取數組,不必一個個輸入所有的選值

      /**
       *  通過模型數組來創建一個字典數組
       *  @param objectArray 模型數組
       *  @return 字典數組
       */
      + (NSMutableArray*)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray;
      + (NSMutableArray*)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys;
      + (NSMutableArray*)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys;
      
      

      7.解決Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.-

      *** Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘*** Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.’
      

      當程序出現這個提示的時候,是因為你一邊便利數組,又同時修改這個數組里面的內容,導致崩潰,網上常見的方法如下:

      NSMutableArray * arrayTemp = xxx;
      
      NSArray * array = [NSArray arrayWithArray: arrayTemp];
      
      for (NSDictionary * dic in array) {
      
      	if (condition){
      
      		[arrayTemp removeObject:dic];
      
      	}
      }
      

      這種方法就是在定義一個一模一樣的數組,便利數組A然后操作數組B。

      NSMutableArray *tempArray = [[NSMutableArray alloc]initWithObjects:@"12",@"23",@"34",@"45",@"56", nil];
      
      [tempArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
      
      if ([obj isEqualToString:@"34"]) {
      
      	*stop = YES;
      
      	if (*stop == YES) {
      
      		[tempArray replaceObjectAtIndex:idx withObject:@"3333333"];
      
      		}
      
      }
      
      if (*stop) {
      
      	NSLog(@"array is %@",tempArray);
      
      }
        
      }];
      

      利用block來操作,根據查閱資料,發現block便利比for便利快20%左右,這個的原理是這樣的:

      找到符合的條件之后,暫停遍歷,然后修改數組的內容

      posted @ 2020-05-18 11:27  weicy  閱讀(254)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 无码人妻丰满熟妇奶水区码 | 亚洲色婷婷综合久久| 忘忧草在线社区www中国中文| 牛牛视频一区二区三区| 一区二区三区黄色一级片| 69天堂人成无码免费视频| 欧美日韩国产亚洲沙发| 精品尤物国产尤物在线看| 在线国产精品中文字幕| 青草视频在线观看视频| 免费国产拍久久受拍久久| 国产热の有码热の无码视频| 大香蕉av一区二区三区| 国产不卡av一区二区| 欧美成本人视频免费播放| 图片区小说区av区| 午夜男女爽爽影院免费视频下载| 国精品无码一区二区三区左线| 亚洲欧洲日产国无高清码图片| 精品乱码一区二区三四区视频| 久久国产精品色av免费看| 肥臀浪妇太爽了快点再快点| 无码激情亚洲一区| 中文字幕日韩国产精品| 最新精品国产自偷在自线| 久久亚洲中文字幕伊人久久大| 岛国岛国免费v片在线观看| 欧美熟妇xxxxx欧美老妇不卡| 日本高清一区免费中文视频| 久久久精品94久久精品| 国产系列丝袜熟女精品视频 | 激情伊人五月天久久综合| 国产精品一区二区三区四| 中文字幕国产精品自拍| 国产按头口爆吞精在线视频| 久热这里有精品视频播放| 亚洲欧美不卡高清在线| 精品无码人妻| 欧美黑人添添高潮a片www| 日本午夜精品一区二区三区电影| h无码精品动漫在线观看|