欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解

 更新時(shí)間:2022年07月26日 09:31:10   作者:公眾號(hào)iOS逆向  
這篇文章主要為大家介紹了iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

在oc 中,如果對(duì)象沒有被強(qiáng)引用,會(huì)被立即釋放。

__weak 表示弱引用 :

Assigning retained object to weak variable; object will be released after assignment

I weak &strong

1.1 使用場(chǎng)景:

控件的使用 :

  • 如果界面的搭建,是采用storyBoard進(jìn)行連接,控件屬性用weak。
  • 如果是采用純代碼搭建界面,控件可以使用strong進(jìn)行修飾;
  • 因?yàn)榇藭r(shí)控件的對(duì)象的兩個(gè)強(qiáng)引用(ViewController的noLable,以及view的subview)都會(huì)隨著控制器ViewController的銷毀而被釋放。

[self.view addSubview:_noLabel];

//將弱引用參照的_noLabel添加到視圖UIView;

UIViewController.h-》@property(null_resettable, nonatomic,strong) UIView *view;

-》UIView.h :@property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *subviews;

-》強(qiáng)引用UILabel對(duì)象,所以這個(gè)UILabel對(duì)象已經(jīng)有擁有者,不會(huì)被放--再添加過程都是操作UILabel對(duì)象的地址

釋放對(duì)象的過程:

  • 程序先對(duì)控制器進(jìn)行釋放,如果沒有對(duì)象對(duì)View進(jìn)行強(qiáng)引用,程序?qū)?duì)view進(jìn)行釋放。
  • 內(nèi)存中如果沒有存在對(duì)subviews 對(duì)象進(jìn)行強(qiáng)引用,就釋subviews。
  • 此時(shí)如果UILabel對(duì)象沒有被強(qiáng)引用,UILabel對(duì)象將被釋放 。

1.2 屬性的修飾

  • 創(chuàng)建的自定義對(duì)象,都用strong。

因?yàn)檫@些對(duì)象不會(huì)有UIViewController的控制,來(lái)進(jìn)行強(qiáng)引用。

  • NSString 使用copy;NSString應(yīng)該使用copy而不是strong的屬性特性。

即使你聲明一個(gè)NSString的屬性,有人可能傳入一個(gè)NSMutableString的實(shí)例,然后在你沒有注意的情況下修改它。

  • 數(shù)字型的,比如int ,就是使用assign。

1.3 weak和strong的不同

當(dāng)一個(gè)對(duì)象不再有strong類型的指針指向它的時(shí)候 它會(huì)被釋放 ,即使還有weak型指針指向它。

一旦最后一個(gè)strong型指針離去 ,這個(gè)對(duì)象將被釋放,所有剩余的weak型指針都將被清除。

例子: 

  • 想象我們的對(duì)象是一條狗,狗想要跑掉(被釋放)?! ?/li>
  • strong型指針就像是栓住的狗。只要你用牽繩掛住狗,狗就不會(huì)跑掉。
  • 如果有5個(gè)人牽著一條狗(5個(gè)strong型指針指向1個(gè)對(duì)象),除非5個(gè)牽繩都脫落 ,否著狗是不會(huì)跑掉的?! ?/li>
  • weak型指針就像是一個(gè)小孩指著狗喊到:“看!一只狗在那” 只要狗一直被栓著,小孩就能看到狗,(weak指針)會(huì)一直指向它。
  • 只要狗的牽繩脫落,狗就會(huì)跑掉,不管有多少小孩在看著它。

II tom 基本實(shí)現(xiàn)(序列幀動(dòng)畫)

  • UIImageView 幀動(dòng)畫的使用
  • UIImage的兩種加載方式 :

有緩存方式的加載方法

無(wú)緩存方式將圖片加載至內(nèi)存

  • 重復(fù)代碼的封裝抽取:等優(yōu)化完畢之后,在刪除被優(yōu)化的舊代碼;

常見的優(yōu)化點(diǎn)有: 數(shù)據(jù)獨(dú)立性的處理(plist、網(wǎng)絡(luò))、魔法數(shù)字的問題解決(宏,枚舉enum)、屬性的懶加載(重寫getter方法) 

代碼示例

/**
  序列幀動(dòng)畫:順序播放一組圖片
 1.提示、如果放置于Assets.xcassets目錄中的圖片不能使用imageWithContentsOfFile:path進(jìn)行加載,只能使用imageName進(jìn)行加載,即內(nèi)存由系統(tǒng)負(fù)責(zé)了;Assets.xcassets 存放一些經(jīng)常使用的小圖片素材
 2。Supporting Files 目錄通常存放,大、不經(jīng)常使用的圖片;
 */
- (void) frameAnimation : (UIButton *) button{
    //如果正在動(dòng)畫播放直接退出,來(lái)保證保證一個(gè)動(dòng)畫播放完成
    if ([self.imageList isAnimating]) {//考慮用戶的重復(fù)點(diǎn)擊進(jìn)行頻繁的展示幀動(dòng)畫問題
        return;
    }
    //順序的改變UIImageView 的image,此時(shí)需要的參數(shù)有:需要播放的序列幀圖片數(shù)組animationImages(UIImage對(duì)象)、幀動(dòng)畫的持續(xù)時(shí)間animationDuration、幀動(dòng)畫的執(zhí)行次數(shù)animationRepeatCount--可自行查看UIImageView的屬性和方法
    //動(dòng)畫圖片的數(shù)組--可修改的數(shù)組NSMutableArray(manage a modifiable array of objects)
    NSMutableArray *arrayImage = [NSMutableArray array];//Creates and returns an empty array.
    //添加幀動(dòng)畫播放的圖片
    //設(shè)置圖片的數(shù)組的
    for (int i = 0; i< self.animationImages[button.tag].count ; i++) {
        //獲取圖片名稱
        NSString *pictureNamePrefix = self.animationImages[button.tag][i];//獲取文件名+擴(kuò)展名       
        //方式一:有緩存加載圖片
        // 添加Image的對(duì)象到幀圖片數(shù)組
//       [arrayImage addObject: [UIImage imageNamed:pictureNamePrefix]];//參數(shù)為圖片名稱,png 格式的可以不加擴(kuò)展名
        //方式二:無(wú)緩存方式加載圖片-指定擴(kuò)展名
//        NSArray *arrayPicture = [pictureNamePrefix componentsSeparatedByString:@"."];//從字符中分隔成2個(gè)元素的數(shù)組(圖片名+擴(kuò)展名)
//        NSString *path = [[NSBundle mainBundle] pathForResource:arrayPicture[0] ofType: arrayPicture[1]];//獲取圖片的全路徑
        //方式二:無(wú)緩存方式加載圖片-不指定擴(kuò)展名
        NSString *path = [[NSBundle mainBundle] pathForResource:pictureNamePrefix ofType:nil];
        [arrayImage addObject:[ UIImage imageWithContentsOfFile:path]];
    }
    [self.imageList setAnimationImages:arrayImage];
    //設(shè)置幀動(dòng)畫的持續(xù)時(shí)間
    [self.imageList setAnimationDuration: self.imageList.animationImages.count * 0.1];
    //設(shè)置幀動(dòng)畫的執(zhí)行次數(shù)
    [self.imageList setAnimationRepeatCount:1];
     //開始動(dòng)畫
    [self.imageList startAnimating];
    //釋放資源:動(dòng)畫結(jié)束之后清除幀動(dòng)畫數(shù)組
    //nvokes a method of the receiver on the current thread using the default mode after a delay.
//    [self performSelector:@selector(cleanUpAnimationsArray) withObject:nil afterDelay:self.imageList.animationDuration];//定義在NSObject的分類中@interface NSObject (NSDelayedPerforming)
    //清除內(nèi)存的代碼簡(jiǎn)化--可以避免定義cleanUpAnimationsArray方法
    [self.imageList performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageList.animationDuration];
}

see also

iOS解決壓縮之后圖片模糊的問題

http://www.dbjr.com.cn/article/256792.htm

以上就是iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解的詳細(xì)內(nèi)容,更多關(guān)于iOS開發(fā)weak strong修飾符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論