1.PyTorch 源码分析(三):torch.nn.Norm类算子
2.Drawableåç±»ä¹ââLayerDrawable ï¼å¾å±å å ï¼
3.正点原子lwIP学习笔记——网络数据包管理
4.bootstrapålayer
5.FasterTransformer Decoding 源码分析(三)-LayerNorm介绍
6.bootstrapålayerç¨åªä¸ª
PyTorch 源码分析(三):torch.nn.Norm类算子
PyTorch源码详解(三):torch.nn.Norm类算子深入解析
Norm类算子在PyTorch中扮演着关键角色,它们包括BN(BatchNorm)、LayerNorm和InstanceNorm。1. BN/LayerNorm/InstanceNorm详解
BatchNorm(BN)的核心功能是对每个通道(C通道)的数据进行标准化,确保数据在每个批次后保持一致的尺度。它通过学习得到的召唤神龙源码修改教程gamma和beta参数进行缩放和平移,保持输入和输出形状一致,同时让数据分布更加稳定。 gamma和beta作为动态调整权重的参数,它们在BN的学习过程中起到至关重要的作用。2. Norm算子源码分析
继承关系:Norm类在PyTorch中具有清晰的继承结构,子类如BatchNorm和InstanceNorm分别继承了其特有的功能。
BN与InstanceNorm实现:在Python代码中,BatchNorm和InstanceNorm的实例化和计算逻辑都包含对输入数据的2D转换,即将其分割为M*N的共享汽车租赁系统源码矩阵。
计算过程:在计算过程中,首先计算每个通道的均值和方差,这是这些标准化方法的基础步骤。
C++侧的源码洞察
C++实现中,对于BatchNorm和LayerNorm,代码着重于处理数据的标准化操作,同时确保线程安全,通过高效的数据视图和线程视图处理来提高性能。Drawableåç±»ä¹ââLayerDrawable ï¼å¾å±å å ï¼
LayerDrawable对åºçXMLçæ ¹å ç´ æ¯<layer-list>,ï¼å®ä½¿ä¸ç§å±æ¬¡åæ¾ç¤ºçDrawableéåãä¹å°±è¯´ï¼å¯ä»¥éè¿æ¾ç¤ºç±å¤ä¸ªDrawableçå å ï¼æ转ï¼ä½ç§»çç»åæ¾ç¤ºåºä¸åä¸Drawableä¸åçææãå¨æ¬æä¸æ们ä¼éä¸ç¸å ³çææãæ ¹æ®å®ç½æ¾ç¤ºå®çè¯æ³å¦ä¸ï¼
åèç¹æè¿ä¹å 个ï¼drawableãidãï¼å个æ¹åï¼topãrightãbuttomåleftã
ï¼å ³äºè¿å个æ¹åå¯ä»¥å¤§æ¦ç解为paddingï¼åä½ä¸ºpxï¼
对äºLayerDrawableæè¿ä¹å 个ç¹ç¹
1ãæ¯ä¸ä¸ªitem表示ä¸ä¸ªDrawable
2ãä¸é¢çDrawaleè¦çä¸é¢çDrawable
3ãiteméé¢å¸¸è§æ¾çæ¯bitmapï¼å½ç¶ä¹å¯ä»¥æ¯shapeï¼ä¸ç®¡æ¯ä»ä¹è¯å®æ¯Drawableã
è³æ¤ææå±ç¤ºå®æã
å¨è¿éæä¸ç¹ï¼æ们ä¸è¬åè¯ä»·çææä¹éè¦å©ç¨LayerDrawableï¼è¿éå°±ä¸éä¸æºç äºï¼è¿ä¸ªç½ä¸æ¸¸å¾å¤åèã
.
.
.
.
å®è·µ
.
.
åçï¼ä»¥åºè¾¹ä¸ºä¾
äºè§£æ´å¤çDrawableåç±» Drawableå¾åèµæºæ½è±¡ç±»
æ¬ç¯å®ã
ç¸å ³åèï¼
ãandroidå¼åèºæ¯æ¢ç´¢ã
ç¨layer-listå®ç°å¾çæ转å å ãéä½å å ãé´å½±ãæé®æ示ç¯
正点原子lwIP学习笔记——网络数据包管理
TCP/IP作为一种数据通信机制,其协议栈的实现本质上是对数据包的处理。为了实现高效率的处理,lwIP数据包管理提供了一种高效的机制。协议栈各层能够灵活处理数据包,同时减少数据在各层间传递时的安阳在线水位监测源码时间和空间开销,这是提高协议栈工作效率的关键。在lwIP中,这种机制被称为pbuf。
用户的数据经过申请pbuf,拷贝到pbuf结构的内存堆中。在应用层,数据的前面加上应用层首部,在传输层加上传输层首部,最后在网络层加上网络层首部。
pbuf用于lwIP各层间数据传递,避免各层拷贝数据!
lwIP与标准TCP/IP协议栈的区别在于,lwIP是一种模糊分层的TCP/IP协议,大大提高了数据传输效率!棋牌游戏源码在哪下载
这是定义在pbuf.h中的关键结构体pbuf。通过指针next构建出了一个数据包的单向链表;payload指向的是现在这个结构体所存储的数据区域;tot_len是所有的数据长度,包括当前pbuf和后续所有pbuf;而len就是指当前pbuf的长度;type_internal有四种类型;ref代表当前pbuf被引用的次数。
右边展示的pbuf_layer就是用来首部地址偏移,用来对应相应的结构体。
PBUF_RAM采用内存堆,长度不定,一般用在传输数据;PBUF_POOL采用内存池,固定大小的内存块,所以分配速度快(一般字节,就是分配3个PBUF_POOL的内存池),一般用在中断服务中;PBUF_ROM和PBUF_REF都是内存池形式,而且只有pbuf没有数据区域,数据都是易语言虎牙登录源码直接指向了内存区(PBUF_ROM指向ROM中,PBUF_REF指向RAM中)。
左边第一幅对应PBUF_RAM;中间两幅对应PBUF_POOL;最后一幅对应PBUF_ROM和PBUF_REF。
其中PBUF_RAM和PBUF_POOL相对更为常用。
更多的函数,都可以在pbuf.c和.h中找到。pbuf_alloc()如果是PBUF_REF或者是PBUF_ROM,就会如上图所示,创建一个结构体指针p,然后会进入pbuf_alloc_reference;该函数中,会申请一个pbuf结构体大小的内存;然后调用pbuf_init_alloced_pbuf进行初始化,初始化可以如上图所示。
如果是PBUF_POOL,会定义q和last两个pbuf结构体指针,q和last都初始化为NULL,rem_len(剩余长度)初始化为(用户指定需要构建的长度);然后q会经过内存申请,qlen则是去rem_len和当前可申请的数据大小(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))取小值,然后同样经过pbuf_init_alloced_pbuf初始化q中的pbuf结构体;然后会把offset清零,就是说之后的pbuf都没有offset了,只有第一个链表的元素有offset;经过if判断并判断rem_len的大小,只要还有剩余就会回去循环继续执行上述操作,直到完成3个内存块的初始化。
首先会计算payload_len和alloc_len,如果是传输数据,那么LWIP_MEM_ALIGN_SIZE(offset)就是,计算得到payload_len=,alloc_len=;然后进入判断payload和alloc的长度是否
进入判断p是否为空,不为空证明还没有释放;进入while语句,每一次都--ref(引用次数);然后类似链表删除,调用相应的pbuf类型的内存释放(内存堆或者内存池),直到p全部被释放。源码如下:
这个就要看你使用的是什么类型,然后会根据类型来决定payload_len的大小,进行相应的payload指针指向数据区前的首部字段。
这一章主要讲述了lwIP中重要的pbuf缓冲,具体有哪些数据构成,为之后的学习奠定基础,确定了pbuf除了所需传输的数据,还有哪些变量需要添加,如何申请对应的pbuf内存大小,以及对应的内存堆和内存池。
bootstrapålayer
bootstrapålayeræä¹ä½¿ç¨
Bootstrapå¸å±
ç®ä»
å¨æ¬æç¨ä¸ï¼æ¨å°å¦ä¹ å¦ä½ä½¿ç¨Bootstrapå·¥å ·å æ¥å建åºå®å¸å±åæµå¨å¸å±ãæç¨æ¯åºäºBootstrapçæ¬2.0ã
å¨çæ¬2.0ä¸ï¼Bootstrap为ææºãå¹³æ¿çµèãç¬è®°æ¬ãå°åå°å¼æºã大å宽å±å°å¼æºçæ·»å äºååºç¹æ§ã
å¯ä»¥éè¿å页é¢æ·»å bootstrap-responsive.cssæ件ï¼ä½äºdocs\assets\cssä¸ï¼æ¥è®©å¸å±å ·æååºæ§ã
Bootstrapåºå®å¸å±
å¦ææ¨æ³è¦å建åºäºåºå®åç´ æ°çç½é¡µæappï¼è¯·çè¿é¨åçæç¨ã
ç¨æ³
body
divclass="container"
...
/div
/body
解é
bootstrap.cssï¼ä½äºbootstrapç主æ件夹çdocs\assets\cssä¸ï¼ç第å°è¡ï¼ä¸ºå建主容å¨æ¸²ææ ·å¼ï¼ä»èå建ä¸ä¸ªåºå®å¸å±ãåºå®å¸å±çç®çæ¯ä¸ºç½é¡µæappå建ä¸ä¸ªåç´ ï¼é»è®¤ï¼å®½çå¸å±ã
Bootstrapåºå®å¸å±çå®ä¾
ä¸é¢ç代ç å建ä¸ä¸ªç½é¡µåºå®å¸å±ã为äºå®å¶ï¼é¤äºé»è®¤æ ·å¼ï¼è¿éå建ä¸ä¸ªæ°çcssæ件example-fixed-layout.cssï¼ä¸bootstrap.cssä½äºåä¸ä¸ªæ件夹ä¸ã
CSS代ç
body{
padding-top:px;
padding-bottom:px;
}
.navli{
padding-top:5px;
}
.leaderboard{
padding:px;
margin-bottom:px;
background-image:url('/twitter-bootstrap/images/gridbg.gif');
background-repeat:repeat;
-webkit-border-radius:6px;
-moz-border-radius:6px;
border-radius:6px;
}
.leaderboardh1{
font-size:px;
margin-bottom:5px;
line-height:1;
letter-spacing:-1px;
color:#FF;
}
.leaderboardp{
font-size:px;
font-weight:;
line-height:px;
}
layeruiåbootstrapçå¼åæåªäºï¼
boostrapå½å¤çå端æ¡æ¶ï¼æ¯è¾æçäºï¼å¹¶ä¸å ¼å®¹å¤ç§è®¾å¤ï¼èªéé æ¯è¾å¥½ï¼ç»ä»¶æ¯layuiæ¼äº®ç¹
layuiæ¯å½äººå¼åçï¼è¿å¤äºå¼åé¶æ®µï¼å¹¶ä¸æ¯å®å ¨æççå端uiæ¡æ¶ï¼åç¡®å°è¯´ï¼å¥¹æ´å¤æ¯ä¸ºæå¡ç«¯ç¨åºåé身å®åï¼ä½ æ éæ¶è¶³åç§åç«¯å·¥å ·çå¤æé ç½®ï¼åªéé¢å¯¹æµè§å¨æ¬èº«ï¼è®©ä¸åä½ æéè¦çå ç´ ä¸äº¤äºï¼ä»è¿éä¿¡æææ¥ã
psï¼æ¯layuiï¼layeræ¯layuiçä¸ä¸ªæ¨¡å为弹çªæ¨¡å
bootstrapålayerç¨åªä¸ªå¥½ï¼ä¸å类弹åºå±ç»ä»¶ç¸æ¯ï¼layerçä¼å¿ææ¾ã
Bootstrapålayerå¸å±
Bootstrapåºå®å¸å±
使ç¨Bootstrapå·¥å ·å æ¥å建åºå®å¸å±åæµå¨å¸å±ãæç¨æ¯åºäºBootstrapçæ¬2.0ãå¨çæ¬2.0ä¸ï¼Bootstrap为ææºãå¹³æ¿çµèãç¬è®°æ¬ãå°åå°å¼æºã大å宽å±å°å¼æºçæ·»å äºååºç¹æ§ãå¯ä»¥éè¿å页é¢æ·»å bootstrap-responsive.cssæ件ï¼ä½äºdocs\assets\cssä¸ï¼æ¥è®©å¸å±å ·æååºæ§ã
layerå¼¹çª
layerï¼ä¸ä¸ªå¯ä»¥è®©ä½ æ³å°å³å¯åå°çwebå¼¹çª(å±)解å³æ¹æ¡(jsç»ä»¶)ï¼ä½è è´¤å¿(å端å¼åå·¥ç¨å¸)ãlayer侧éäºç¨æ·çµæ´»çèªå®ä¹ï¼ä¸ºä¸å人ç使ç¨ä¹ æ¯æä¾å¨åãå ¶æä¹å¨äºï¼å¯ä»¥è®©æ¨ç页é¢æ¥ææ´ä¸°å¯ä¸ä¾¿æ·çæä½ä½éªï¼èæ¨åªéå¨è°ç¨æ¶ç®åå°é ç½®ç¸å ³åæ°ï¼å³å¯è½»æ¾å®ç°ã
Bootstrapï¼æ¥èªTwitterï¼æ¯ç®åå¾å欢è¿çå端æ¡æ¶ãBootstrapæ¯åºäºHTMLãCSSãJavaScriptçï¼å®ç®æ´çµæ´»ï¼ä½¿å¾Webå¼åæ´å å¿«æ·ãå®ç±Twitterç设计å¸MarkOttoåJacobThorntonåä½å¼åï¼æ¯ä¸ä¸ªCSS/HTMLæ¡æ¶ã
Bootstrapæä¾äºä¼é çHTMLåCSSè§èï¼å®å³æ¯ç±å¨æCSSè¯è¨LessåæãBootstrapä¸ç»æ¨åºåé¢å欢è¿ï¼ä¸ç´æ¯GitHubä¸ççé¨å¼æºé¡¹ç®ï¼å æ¬NASAçMSNBC(å¾®è½¯å ¨å½å¹¿æå ¬å¸)çBreakingNewsé½ä½¿ç¨äºè¯¥é¡¹ç®ãå½å ä¸äºç§»å¨å¼åè è¾ä¸ºçæçæ¡æ¶ï¼å¦WeX5å端å¼æºæ¡æ¶çï¼ä¹æ¯åºäºBootstrapæºç è¿è¡æ§è½ä¼åèæ¥ã
FasterTransformer Decoding 源码分析(三)-LayerNorm介绍
本文深入探讨FasterTransformer中LayerNormalization(层归一化)的源码实现与优化。作为深度学习中的关键技术,层归一化可确保网络中各层具有相似的分布,从而加速训练过程并改善模型性能。背景介绍部分详细解释了层归一化的工作原理,强调其在神经网络中的高效并行特性与广泛应用。文章从代码起点开始剖析,具体路径位于解码过程的核心部分。调用入口展示了传入参数,包括数据描述和关键参数gamma、beta、eps,简洁直观,符合公式定义。深入源码的解析揭示了优化点,特别是针对特定数据类型和维度,使用了定制化内核。此设计针对高效处理半精度数据样本,减少判断指令,实现加速运算,且对偶数维度数据进行调整以最大化Warp特性利用。接下来,内核实现的详细描述,强调了通过共享内存与block、warp级归约实现公式计算的高效性。这部分以清晰的代码结构和可视化说明,解释了块级别与Warp级归约在单个块处理多个数据点时的协同作用,以及如何通过巧妙编程优化数据处理效率。文章总结了FasterTransformer中LayerNormalization的整体优化策略,强调了在CUDA开发中基础技巧的应用,并指出与其他优化方案的比较。此外,文章还推荐了OneFlow的性能优化实践,为读者提供了一个深入探索与对比学习的资源。
bootstrapålayerç¨åªä¸ª
ä¸å类弹åºå±ç»ä»¶ç¸æ¯ï¼layerçä¼å¿ææ¾ã
Bootstrapålayerå¸å±Bootstrap åºå®å¸å±
ä½¿ç¨ Bootstrap å·¥å ·å æ¥å建åºå®å¸å±åæµå¨å¸å±ãæç¨æ¯åºäº Bootstrap çæ¬ 2.0ãå¨çæ¬ 2.0 ä¸ï¼Bootstrap 为ææºãå¹³æ¿çµèãç¬è®°æ¬ãå°åå°å¼æºã大å宽å±å°å¼æºçæ·»å äºååºç¹æ§ãå¯ä»¥éè¿å页é¢æ·»å bootstrap-responsive.css æ件ï¼ä½äº docs\assets\css ä¸ï¼æ¥è®©å¸å±å ·æååºæ§ãlayerå¼¹çªlayerï¼ä¸ä¸ªå¯ä»¥è®©ä½ æ³å°å³å¯åå°çwebå¼¹çª(å±)解å³æ¹æ¡(jsç»ä»¶)ï¼ä½è è´¤å¿(å端å¼åå·¥ç¨å¸)ãlayer侧éäºç¨æ·çµæ´»çèªå®ä¹ï¼ä¸ºä¸å人ç使ç¨ä¹ æ¯æä¾å¨åãå ¶æä¹å¨äºï¼å¯ä»¥è®©æ¨ç页é¢æ¥ææ´ä¸°å¯ä¸ä¾¿æ·çæä½ä½éªï¼èæ¨åªéå¨è°ç¨æ¶ç®åå°é ç½®ç¸å ³åæ°ï¼å³å¯è½»æ¾å®ç°ã
Bootstrapï¼æ¥èª Twitterï¼æ¯ç®åå¾å欢è¿çå端æ¡æ¶ãBootstrap æ¯åºäº HTMLãCSSãJavaScript çï¼å®ç®æ´çµæ´»ï¼ä½¿å¾ Web å¼åæ´å å¿«æ·ã å®ç±Twitterç设计å¸Mark OttoåJacob Thorntonåä½å¼åï¼æ¯ä¸ä¸ªCSS/HTMLæ¡æ¶ã
Bootstrapæä¾äºä¼é çHTMLåCSSè§èï¼å®å³æ¯ç±å¨æCSSè¯è¨LessåæãBootstrapä¸ç»æ¨åºåé¢å欢è¿ï¼ä¸ç´æ¯GitHubä¸ççé¨å¼æºé¡¹ç®ï¼å æ¬NASAçMSNBC(å¾®è½¯å ¨å½å¹¿æå ¬å¸)çBreaking Newsé½ä½¿ç¨äºè¯¥é¡¹ç®ã å½å ä¸äºç§»å¨å¼åè è¾ä¸ºçæçæ¡æ¶ï¼å¦WeX5å端å¼æºæ¡æ¶çï¼ä¹æ¯åºäºBootstrapæºç è¿è¡æ§è½ä¼åèæ¥ã
layeruiå¦ä½ä½¿ç¨LayerUI
lauiçåºæ¬ç¨æ³ä»ç»æ¹æ³:layui.define([mods]ï¼åè°)LocalStorageæ¯å¯¹æ¬å°åå¨åsessionStorageçå好å°è£ ï¼å¯ä»¥æ´æ¹ä¾¿å°ç®¡çæ¬å°æ°æ®ã
LocalStorageæä¹ åå¨:layui.data(tableï¼settings)ï¼é¤éç©çå é¤ï¼å¦åæ°æ®å°æ°¸è¿åå¨ã
sessionstoragesessionstorage:layui.sessiondata(tableï¼settings)ï¼å ³é页é¢æ¶ä¼å¤±æã注æ:laui2.2.5æ¯æ°çã
layui.device(å¯é¥)
æ¹æ³/å±æ§æè¿°
Layui.cacheéæå±æ§ãè·åä¸äºé ç½®å临æ¶ç¼åä¿¡æ¯ã
Layui.extend(options)æ©å±æ¨¡åå«åï¼å¦layui.extend({ test:/RES/js/test})
éålayui.each(objï¼fn)对象(æ°ç»ï¼å¯¹è±¡ï¼DOM对象çã)ï¼å¯ä»¥ç¨æ¥æ¿æ¢forè¯å¥ã
Layui.getStyle(nodeï¼name)è·åä¸ä¸ªåå§DOMèç¹çæ ·å¼å±æ§å¼ï¼æ¯å¦:Layui.getstyle(document.bodyï¼font-size)
layui.img(url,callback,error)å¾çé¢å è½½Layui.img(urlãåè°ãé误)å¾åé¢å è½½
Layui.sort(objï¼keyï¼desc)æ ¹æ®æ个æå对æ°ç»ä¸ç对象è¿è¡éæ°æåºï¼æ¯å¦:Layui.sort([{ a:3}ï¼{ a:1}ï¼{ a:5}]ï¼ä¸)
Layui.router()è·ålocation.hashè·¯ç±ï¼ä½ç®åå¨Layuiä¸ä¸èµ·ä½ç¨ã对äºå页åºç¨ç¨åºæ¥è¯´ï¼å®ä¼å¾æ¹ä¾¿ã
Layui.hint()å°ä¸äºå¼å¸¸ä¿¡æ¯æå°å°æ§å¶å°ï¼åªæerroræ¹æ³:layui.hint()ãé误(é误)
é²æ¢äºä»¶å泡ã
Layui.onevent(modnameï¼eventsï¼callback)èªå®ä¹æ¨¡åäºä»¶ï¼å±äºæ¯è¾é«çº§çåºç¨ãæå ´è¶£çåå¦å¯ä»¥ççlayui.jsçæºä»£ç å表å模åã
Layui.event(modnameï¼eventsï¼params)æ§è¡èªå®ä¹æ¨¡åäºä»¶ï¼å¹¶ä¸oneventä¸èµ·ä½¿ç¨ã
layui.factory(modName)ç¨äºè·å模å对åºçå®ä¹åè°å½æ°ã
å¨æ¨¡å空ä¹é´å½å
layuiç模åæ¥å£å°è¢«ç»å®å¨layui对象ä¸ï¼å ¶å é¨ç±layui.define()æ¹æ³å®æãæ¯ä¸ªæ¨¡åå°æä¸ä¸ªå¯ä¸çå称ï¼ä¸è½è¢«å ç¨ãæä»¥ä½ ä¸éè¦æ å¿æ¨¡åç空æ¿é´è¢«æ±¡æï¼é¤éä½ ä¸»å¨å äºæuiã{ 模åå称}ãå¯ä»¥éè¿layui.useæ¹æ³è°ç¨æ¨¡åï¼ç¶åéè¿layui对象è·å模åæ¥å£ã
å¦ä½ä½¿ç¨å é¨jQuery
//主å¨å è½½jquery模å
layui.use([jqueryå±]ï¼å½æ°(){
Var//å ³é®ç¹
ï¼layer=layui.layer
//å°±åä½ å¹³æ¶ç¨jQueryä¸æ ·ã
$(æ£æ).追å (ä½ å¥½jquery
});
pså¦ä½å¿«éæ¢åºç²¾è´ï¼
åå§ç©ä½æ®µæ°ç°å·²ç»è½ä¿®æ¹å å·²ç»å»ºå¥½æ¨¡ååä¿®æ¹å级段æ°ä¼ä½¿æ¨¡ååºç°é误ç´æ¥éæ©è§å¾å¤ªéå©è¾¹ç¼çº¿EditMeshééæ©Bevelå½ä»¤ä¹åè§ä½¿äºéå©å¤åæ»è¾¹è§åæ»ç¹å¼é¢æ¹æ ¼æ¥è°æ´åè§æ®µæ°å大å°ä¹å³è¾¹å±æ§æ éè°èoffset大å°Segments段æ°å ¶å®ä¹èªå·±è¯ä¸å°å¿æå±æ§æ å ³æDisplay-UIElements--ChannelBox/LayerEditoræé©å¼å¯å±æ§æ äºPS.æç¨ç¥éç¨ææåªåäºæ没ç¨è¿æè§å¾åºè¯¥ä¹ä¼å·®å¤å§
iOS7appstore带边æ¡çæé®æ¯æä¹å®ç°çï¼
å¯ä»¥ç¨viewçlayerå±æ§æ¥åçãå¦æåªæ¯ç®åå°å ä¸ä¸ªè¾¹æ¡çè¯ï¼å¯ä»¥è¿æ ·ï¼
UIButton*yourButton=;
//åå§åå·¥ä½ï¼è®¾ç½®æåï¼frameççï¼ç¥
//æé®è¾¹æ¡å®½åº¦
yourButton.layer.borderWidth=1.5;
//设置åè§
yourButton.layer.cornerRadius=4.5;
//设置é¢è²ç©ºé´ä¸ºrgbï¼ç¨äºçæColorRef
CGColorSpaceRefcolorSpace=CGColorSpaceCreateDeviceRGB();
//æ°å»ºä¸ä¸ªçº¢è²çColorRefï¼ç¨äºè®¾ç½®è¾¹æ¡ï¼å个æ°ååå«æ¯r,g,b,alphaï¼
CGColorRefborderColorRef=CGColorCreate(colorSpace,(CGFloat){ 1,0,0,1});
//设置边æ¡é¢è²
yourButton.start.layer.borderColor=borderColorRef;
å¦å¤ï¼è¿éæä¸ä¸ªç²¾å½©çä¾åï¼æ¨èä¸ä¸ï¼
/ios/UIButton-Bootstrap/e8cfab
osç³»ç»æ¶æï¼
第ä¸ãæä½ç³»ç»å±ï¼OSï¼
第äºãåç§åºï¼Librariesï¼åAndroidè¿è¡ç¯å¢ï¼RunTimeï¼
第ä¸ãåºç¨ç¨åºæ¡æ¶ï¼ApplicationFrameworkï¼
第åãåºç¨ç¨åºï¼Applicationï¼