在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/iOS/ 內(nèi)存管理的疑問,值得琢磨。

內(nèi)存管理的疑問,值得琢磨。

起因是在看網(wǎng)上的框架FLEX里的代碼,有一些疑問,具體代碼就是這幾行

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data delegate:(id<NSURLConnectionDelegate>)delegate
{
    // Just to be safe since we're doing this async
    data = [data copy];
    [self performBlock:^{
        NSString *requestID = [[self class] requestIDForConnectionOrTask:connection];
        FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID];
        [requestState.dataAccumulator appendData:data];
        [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:data.length];
    }];
}

- (void)performBlock:(dispatch_block_t)block
{
    if ([[self class] isEnabled]) {
        dispatch_async(_queue, block);
    }
}

這個(gè)方法是在系統(tǒng)調(diào)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

調(diào)用的,然后我有以下幾個(gè)疑問:
1.在ARC環(huán)境下,默認(rèn)情況下,每個(gè)變量都是對(duì)指向?qū)ο蟮膹?qiáng)引用,那對(duì)于形參怎么理解,是不是可以也可以看成強(qiáng)引用,因?yàn)樾螀⒃诜椒ǖ恼{(diào)用過程也算局部變量?

2.如果默認(rèn)是強(qiáng)引用的話,如果傳入時(shí)對(duì)象沒有被回收,那么執(zhí)行過程肯定不會(huì)被回收,也不會(huì)變成野指針,我這樣理解沒問題吧?

3.在這個(gè)方法形式參數(shù)在異步被調(diào)用,那么這個(gè)形式參數(shù)是不是應(yīng)該在異步調(diào)用結(jié)束再銷毀,如果可以這樣理解的話。

  // Just to be safe since we're doing this async
    data = [data copy];

這一句是不是多余的?

回答
編輯回答
命多硬

[data copy] 我想是為了避免,data被修改。你看到傳入的類型是NSData,但它有可能是NSMutableData,如果外界把數(shù)據(jù)修改了,那么你的數(shù)據(jù)也會(huì)受到干擾。

這也是為什么NSString、NSData這些類型屬性為什么使用copy關(guān)鍵詞修飾

2018年5月12日 03:43
編輯回答
我甘愿

你是否贊同我前兩個(gè)的看法

2017年3月23日 09:36