Algorithm
905. Sort Array By Parity
LeetCode鏈接
class Solution {
public int[] sortArrayByParity(int[] A) {
int count = A.length;
int[] arr = new int[count];
int left = 0;
int right = count - 1;
for (int i = 0; i < count; i++) {
if (A[i] % 2 == 0) {
arr[left++] = A[i];
} else {
arr[right--] = A[i];
}
}
return arr;
}
}
Review
Understanding weak and strong in Objective C
代碼塊很棒灼捂。為了防止循環(huán)引用我們經(jīng)嘲T啵可以看到下面這樣weak-strong的寫法。
__weak __typeof__(self) weakSelf = self;
self.block = ^{
__typeof__(self) strongSelf = weakSelf;
[strongSelf doSomething];
[strongSelf doSomethingElse];
};
當(dāng)block創(chuàng)建的時(shí)候
當(dāng)被拷貝的時(shí)候Block是對象
block在棧上創(chuàng)建俺孙,并在棧幀返回時(shí)消失皱卓。在棧中臣缀,block對其訪問的任何內(nèi)容的存儲或生命周期沒有影響瞭亮。
如果在棧幀返回后block需要存在,則可以將它們復(fù)制到堆中蝗羊,并且此操作是顯式操作藏澳。這種方式,block將獲得引用計(jì)數(shù)和Cocoa中的所有對象一樣耀找。復(fù)制它們時(shí)翔悠,它們會捕獲它們捕獲的范圍,保留它們引用的任何對象
block可以從封閉范圍捕獲值
除了包含可執(zhí)行代碼之外野芒,block還具有從其封閉范圍捕獲狀態(tài)的能力蓄愁。請注意,block會捕獲變量及其裝飾器(即弱限定符)狞悲,
=>這解釋了為什么你需要聲明self
為__weak
執(zhí)行block時(shí)
當(dāng)block執(zhí)行時(shí)撮抓,對于第一個(gè)方法(doSomething
),weakSelf
可能是非nil
效诅,而對于第二個(gè)方法(doSomethingElse
)則不是
您可能會認(rèn)為胀滚,首先,這是在block
內(nèi)使用self
避免保留周期警告的技巧乱投。不是這種情況咽笼。在塊執(zhí)行時(shí)創(chuàng)建對self的強(qiáng)引用,而在塊聲明時(shí)評估塊中的self戚炫,從而保留對象剑刑。
但是,對于最佳實(shí)踐双肤,您應(yīng)該使用弱對象創(chuàng)建對象的強(qiáng)引用施掏。這不會產(chǎn)生循環(huán)引用,因?yàn)閎lock中的強(qiáng)指針只會在block完成之前存在(它的生命周期是block內(nèi)部)茅糜。
=>這解釋了為什么你需要定義另一個(gè)__strong self
更多解釋
正如許多人所指出的那樣七芭,“Block在棧上創(chuàng)建,并在棧幀返回時(shí)消失蔑赘。在棧中狸驳,一個(gè)Block對它訪問的任何對象的存儲或生命周期沒有影響∷跞“
即使Block(在棧上聲明的)增加了它訪問的所有對象的引用計(jì)數(shù)耙箍,這也無所謂,因?yàn)檫@個(gè)Block將在函數(shù)返回時(shí)銷毀
當(dāng)復(fù)制Block時(shí)(你看到人們通常聲明Block的屬性copy
)酥馍,它會增加它訪問的所有對象的引用計(jì)數(shù)辩昆。
為什么?因?yàn)锽lock意味著稍后要執(zhí)行旨袒,所以它需要對它訪問的所有對象保持強(qiáng)引用汁针。Block可以執(zhí)行很多次术辐,所以在這個(gè)運(yùn)行之后它不會釋放self。
當(dāng)你清空Block時(shí)扇丛,它將銷毀术吗,因此它會減少它訪問的所有對象的引用計(jì)數(shù)。
AFNetworking在調(diào)用后會將Block置為空帆精,因此您不必使用weakself在Block內(nèi)部
所以有些情況下你不必在Block內(nèi)使用weakself
確保未復(fù)制Block较屿,您只是聲明并運(yùn)行它
調(diào)用Block后確保該block為nil
Tip
最近這幾天在為了職級晉升的事情選方向和技能點(diǎn),做Demo卓练,忙活了兩天感覺一無所獲隘蝎,個(gè)人的感觸就是持續(xù)不斷的成就感會刺激你更堅(jiān)定的走下去,而不斷的挫折感會打消你的積極性,讓你放棄,所以當(dāng)你去做一件事的時(shí)候一定要給予自己足夠的正向激勵钙皮,這樣你才能保證持續(xù)學(xué)習(xí)的狀態(tài)仿荆。另外吐槽一點(diǎn)的就是國內(nèi)網(wǎng)絡(luò)上很多文章寫的都有很大的問題叫胖,不能夠與時(shí)俱進(jìn),比如某個(gè)方案可能在某個(gè)IDE的版本可以但是新版本就不適用了,并且編譯原理相關(guān)的文章數(shù)量極少,且天下文章一大抄冰评,長得都差不多。
這時(shí)候突然想著自己這只菜雞什么時(shí)候能夠把基礎(chǔ)知識夯實(shí)木羹,寫一些高質(zhì)量的文章甲雅,解救那些剛?cè)腴T的編程小白,讓他們少走一些彎路坑填,幫助別人的同時(shí)也在提升自己的輸出和表達(dá)能力抛人,于是又有了努力學(xué)習(xí)的動力。
Share
最近在看關(guān)于CodeReview方面的文章脐瑰,又通讀了一遍專欄里推薦的這兩篇文章妖枚,后期還會整理更多這方面的優(yōu)質(zhì)文章。