1.ios block和delegate的源码区别
2.iosä¸blockçä¸ç§å½¢å¼
3.iosä¸blockåweakçåºå«
4.ioså¼åblock为空äºä¸ºä»ä¹
5.ios blockå代ççåºå«
ios block和delegate的区别
1.共同的作用:Block 和 Delegate中的方法都可以理解成回调函数,当某件事情发生的源码时候取执行一段代码片段2.Block(代码块)优点:是一种轻量级的回调,能够直接访问上下文,源码使用块的源码地方和块的实现地方在同一个地方,使得代码组织更加连贯3.Delegate(代理)相对来说是源码魔神战纪源码重量级的回调,缺点: 因方法的源码微站宝源码声明和实现分离开来,代码的源码连贯性不是很好 代理很多时候需要存储一些临时数据优点: 代理的回调函数可以是一组多个函数,在不同的源码时机调用不同的回调函数4.如何选择使用哪一种 1.当回调函数多于3个的时候,采用代理比较好 2.使用代码块容易造成循环引用,源码代理不会出现该问题 3.其他情况下优先考虑代码块Block分为三种:临时性的源码,只用在栈当中,源码不会存储起来。源码比如数组的源码6lowpan 源码 foreach 遍历,这个遍历用到的源码 block 是临时的,不会存储起来。源码需要存储起来,但只会调用一次,android 网速测试源码或者有一个完成时期。比如一个 UIView 的动画,动画完成之后,需要使用 block 通知外面,串口发送文件源码一旦调用 block 之后,这个 block 就可以删掉。需要存储起来,可能会调用多次。比如按钮的点击事件,假如采用 block 实现,这种 block 就需要长期存储,并且会调用多次。调用之后,block 也不可以删除,可能还有下一次按钮的点击ios block和delegate的区别
iosä¸blockçä¸ç§å½¢å¼
Blockæä¸ç§ç±»å:æ们å¨è®² blockçæ¬è´¨ çæ¶åå·²ç»ç¥éäº,blockçæ¬è´¨å°±æ¯ä¸ä¸ª OC 对象,é£ä¹æ¢ç¶å®æ¯ä¸ä¸ª OC 对象,å®å°±ä¼æç±»å,æ¬æå°±å°è®²è§£ block çä¸ç§ç±»å.并é½ç»§æ¿äºNSBlock
æ们å¨è®² block çä¸ç§ç±»åä¹å,å äºè§£ä¸ä¸ç¨åºçå ååé æ åµ,å 为ä¸åç±»åç block åé çå åä¹ä¸å.
ç»è®º: 没æè®¿é® autoåé çblock å°±æ¯ __NSGlobalBlock
ç»è®º:访é®äºautoåé çblock å°±æ¯ __NSStackBlock
æä¹æå°çæ¯NSMallocBlock,åæä¸æ¯è¯´è®¿é®äºautoåéå°±æ¯__NSStackBlockå?
å 为è¿éæ们使ç¨çæ¯ARC,å¨ARCç¯å¢ä¸,Xcodeç¼è¯å¨åæäºæ åµä¼é»è®¤å¸®æ们åè°ç¨copy åæå block ,æ们å¨Build Settingsä¸æARC设置æMRC,åæ¥æå°ä¸ä¸:
è¿æ¬¡æå°çå°±æ¯NSStackBlock
æ们æèä¸ä¸,__NSStackBlockå¨è®¿é®å¤é¨åéæ¶,ä¼æä»ä¹é®é¢?
ä¼åºç°éæécrash æ以å¨ARCåå¢Xcode帮æ们å¤çæäºå blockï¼NSMallocBlockï¼é²æ¢åºç°éæ¾äºè¿å»è®¿é®å¯¼è´éæécrash
ç»è®º: å½ä¸ä¸ª__NSStackBlockè°ç¨äºcopyæä½,è¿åçå°±æ¯ä¸ä¸ª__NSMallocBlock
以ä¸é½æ¯å¨MRCç¯å¢ä¸
å¦ææ¯å¨ARCç¯å¢ä¸,ç¼è¯å¨ä¼æ ¹æ®æ åµèªå¨å°æ ä¸çblockå¤å¶å°å ä¸, æ¯å¦ä»¥ä¸å ç§æ åµ:
1:ä¸å ±æä¸ç§ç±»åçBlock.å为__NSGlobalBlock,__NSStackBlock,__NSMallocBlock.
没æè®¿é® autoåé çblock å°±æ¯ __NSGlobalBlock
访é®äºautoåé çblock å°±æ¯ __NSStackBlock
å½ä¸ä¸ª__NSStackBlockè°ç¨äºcopyæä½,è¿åçå°±æ¯ä¸ä¸ª__NSMallocBlocksing
2:å¨ARCç¯å¢ä¸,ç¼è¯å¨ä¼èªå¨ææ ä¸çblock copyå°å ä¸
iosä¸blockåweakçåºå«
trongåweakçåºå«
strong表示ä¿çå®æåçå ä¸çå ååºåä¸åæåè¿ååºåäºã
ä¹å°±æ¯è¯´æ强åæåäºä¸ä¸ªåºåï¼æ们ä¸åæåå®çæ¡ä»¶åªææ们æånilæè æèªå·±ä¹ä¸å¨å åä¸ï¼æ²¡æ人strongæåæäºï¼weak表示å¦æè¿æ²¡æ人æåå®äºï¼å®å°±ä¼è¢«æ¸ é¤å åï¼åæ¶è¢«æånilï¼å 为æä¸è½è¯»åä¸åå¨çä¸è¥¿ã
weakåªå¨IOS5.0使ç¨
è¿å¹¶ä¸æ¯åå¾åæ¶ï¼æ们ç¨reference count表示å ä¸è¿æå¤å°strongæéï¼å½å®å为0就马ä¸éæ¾ã
æ¬å°åéé½æ¯strongï¼ç¼è¾å¨å¸®ä½ 计ç®
ioså¼åblock为空äºä¸ºä»ä¹
block ä¸è¬æ åµæ¯å®æåè°ï¼æ°æ®åä¼ ï¼å¦æä¸éè¦æ°æ®åä¼ ï¼é£ä¹å°±å¯ä»¥ä¸ºç©º
ios blockå代ççåºå«
é¦å 两è ä½ç¨æ¯ä¸æ ·çï¼é½æ¯è¿è¡åä¸åè°ã
ä¸éçæ¯ï¼delegateæ¯ä¸ªå¯¹è±¡ï¼ç¶åç¨è¿ä¸ä¸ªå¯¹è±¡èªå·±è°ç¨ä»£çåè®®å½æ°æ¥å®ææ´ä¸ªæµç¨ã
blockæ¯ä¼ éä¸ä¸ªå½æ°æéï¼å©ç¨å½æ°æéæ§è¡æ¥è¿è¡åè°ã
è¿æå¨å å管çä¸éè¦æ³¨æï¼delegateä¸éè¦ä¿åå¼ç¨ãblock对å¼ç¨æ°æ®æcopyçå¤çã