首页 文章 精选 留言 我的

精选列表

搜索[个人知识库],共10000篇文章
优秀的个人博客,低调大师

Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考

总结:继承、分类(Category、extension)、协议(protocol) 一、继承: (1)特点:继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码,不仅简化了代码,而且也提高了代码的复用性。 (2)过程:当子类需要的方法和属性在父类中找不到时,子类可以添加自己必要的方法和属性,目的是对功能进行扩充;当父类中有子类需要的方法,但是方法中内容并不能完成子类的需要时,子类可以重新实现这个同名的函数,它会覆盖父类的同名函数来实现子类的需要的内容。 (3)格式:@interface 类名 : 父类名 =====> .h声明文件 { 属性property; } //@property(参数1,参数2) 类型名 变量名; 方法method; @end @implementation 类名 ======>.m实现文件 //@synthesize 变量名 { 实现方法method; } @end (4)说明: @property(参数1,参数2)、 @synthesize 变量名 读写属性: (readwrite/readonly) setter语意:(assign/retain/copy) 原子性: (atomicity/nonatomic) 各参数意义如下: readwrite:产生setter\getter方法 readonly:只产生简单的getter,没有setter。 assign:默认类型,setter方法直接赋值,而不进行retain操作 retain:setter方法对参数进行release旧值,再retain新值。 copy:setter方法进行Copy操作,与retain一样 nonatomic:禁止多线程,变量保护,提高性能 二、分类:有两种形式 第一种:类别(命名的分类) Category 它有.h和.m文件 (只能新添加方法) 第二种:类扩展(延展)(未命名的分类) extension 它只有.h文件 (可以添加方法和实例变量) (1)特点:分类多用于没有源代码的类,分类可以提供类需要的所有方法,它扩展类的功能,一般分模块进行。当然,它在不修改原有类的基础上添加新的方法,正是因为它具有将一个庞大的类可以分模块实现的优点,才使得做项目时更有利于团队的合作。它在扩展现有类的方法时,不需要访问源码,也不需要创建子类,而且也不必实现分类中的所有方法,这是它与一般接口和协议的区别之处。当分类中的方法与类方法同名时,它会覆盖类中的方法,那么类的同名方法永远就执行不到。 (2)过程:<1>类别Category的使用时,它有.h声明文件和.m实现文件,所有新添加的方法都放在.h文件中进行声明,然后再.m文件中根据自己的需要选择性的实现这些方法。切记,它只能新添加方法,而且都是公有的;<2>类扩展extension使用时,它只有.h声明文件,所有新添加的方法和实例变量都只能在类中分别进行实现和初始化。切记,它新添加的方法和实例变量都是类私有的,只能在本类中进行访问,访问方式为[self method],不然即使在其他的任何地方有这个类的对象也不能访问到。一般地,类扩展不单独作为一个文件,而是直接把它写入类的实现文件中实现即可。 (3)格式:头文件名 类名+分类名.h 例如:NSString+Math.h <1>Category @interface 类名(分类名) =========> .h声明文件 { 新添加的方法method; } @end @implementation 类名 ==========>.m实现文件 { 实现新添加的方法method; } @end <2> extension @interface类名() ============> .h声明文件 { 先添加的实例变量property; } //@property(参数1,参数2) 类型名 变量名; 新添加的方法method; @end (4)提醒:在类别中只能添加方法,方法都是公有的;在类扩展中,既可以添加方法,也可以添加实例变量,但是添加的内容都是类私有的,只能在类的内部访问。 三、协议(protocol) (1)特点:协议多用在许多类同时使用相同的方法而且这些代码重复性很大的情况下,它会把这些重复的代码提炼出来放在一个协议里,供大家使用。它确实有些类似于java中的接口和C++中的纯虚函数的抽象类,它提供协议的规则,使用者只有遵从协议的规则才能使用它所提供的方法。当然这些方法在协议中它只是帮助进行了声明,并没有任何的实现。当使用者遵从这个协议并使用它的方法时,如果在类声明文件中方法都是默认的或者是@required时,那么在类实现文件中必须全部地实现这些方法。如果是@optional标记的,使用者可以选择性的实现,视情况而定。 (2)过程:它只有.h声明文件,它既可以作为一个单独的文件进行声明所提供的方法,也可以直接放在类声明文件中进行声明,一般采用后者进行声明。它的方法声明时有默认、@required、@optional三种情况。当使用前面两种时,在类实现文件中必须全部地实现这些方法。如果是@optional标记的,使用者可以选择性的实现,视情况而定。当它的方法没有@optional时,那么它就类似于接口中的abstract整个类是抽象的,是必须全部实现所有的方法的。 (3)格式:@protocol 协议名:<父类协议名> =======>放在类的.h文件中或者在自己的单独创建的.h文件中 { method1;//默认的,类实现文件中必须要实现这个方法 @required method2; //需求的,类实现文件中必须要实现这个方法 @optional method3;//可选择的,使用者可以选择性的实现 } @end (4)应用:利用协议可以实现代理模式。也就是给类寻找委托人,帮助类完成一些功能,而类不用自己亲自去做。这种代理模式使得代码的灵活性提高,也降低了耦合性,不必向继承那样,因为父类和子类的耦合性太强,父类一变化,子类就也得跟着变化,太过麻烦。协议要求,不管使用者是谁,阿猫阿狗都行,只要遵从规则,就可以用协议的方法替类去完成委托的任务。类似于老板与秘书的关系:老板出差时,秘书给老板订票、订房;老板开会时,秘书就负责通知所有要开会的人。。。 (5)说明:协议也是可以继承的,就如所有类的根类是NSObject一样,协议的根类协议也是NSprotocol;满足协议规则的类,在类的后面跟上<协议名字>,例如:@interface Student:Person<协议名> 程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式! 本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4726164.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

个人开发者都可享受 无服务器计算颠覆收费

无服务器计算(Serverless Computing)来了,设备商先别急着跑,这其实是软件开发人员和管理者的春天。所谓“无服务器”是一种抽象概念,开发人员编好代码上传到云,无需配置或管理服务器即可运行代码,按照所编好的被管理代码计算时间付费。如果说DevOps(开发运维一体化)是敏捷协作的代表,那么无服务器计算强调的则是NoOps。 什么是NoOps?当然不是完全放弃运维,而是要突出自动化运维,避免更多的人工干预,与无服务器计算的思路有着异曲同工之妙。既然无法摆脱“显性”的基础设施,干脆就把应用程序从原有的框架中取出来。在一定程度上,算是改变了软件的开发和部署模式,对于开发者来说最直观的影响就是付费。事实上,随着虚拟机转向容器和微服务,这也为无服务器计算概念的推广奠定了基础,带来了更加细分化的需求。 原有整体交付的方式可以被拆分为单独功能或代码实现,即一段完整的业务流不仅能够体现为一段视频或一幅图片,也可以是一行代码,这些代码形成的片段均可实现完整功能。借助无服务器计算,系统能够自行编排代码片段。应用程序会直接在服务器上运行,几乎所有的管理工作交由服务商来负责,使用者无需进行预置、扩展、维护等操作,即可运行数据库、存储或软件程序。 无论是虚拟机还是容器,都可以看作是通过代码实现的方案,本质上与无服务器计算并不冲突。操作过程中,开发人员无需考虑选择什么容器,只要安心编写代码,由服务商将片段加以整合管理,节省了软件创建时的付出,让双方做各自擅长的事情,效率更高。在弹性基础架构中,开发者能够将应用“切成”小块通过高度扩展的方式部署。从某种程度上来说,无服务器计算为资源使用提供了新模式,其定位更像是介于IaaS和PaaS之间。 计费方面,开发者不用像原来那样为了数分钟或数小时的应用实例支付整套费用,而是只需支付某一段函数运行的几毫秒,这种方式是更精准的按需付费。按照这个逻辑,无服务器计算平台在云端似乎更适用于由众多微服务“拼接”而成的应用。无论是基础设施管理还是应用构建,均节省了不少“无用功”。 目前,涉足无服务器计算的不仅包括亚马逊(AWS Lambda)、微软(Azure Functions)、谷歌(Cloud Functions)、IBM(OpenWhisk)这样的巨头公司,还有Iron.io这样的垂直公司。这些服务各有特色,例如OpenWhisk主打开源,Azure Functions结合了微软IoT、SaaS方案,Iron.io则是希望构建主流公有云和私有云的全平台兼容,确保高度可移植性。 尽管有大厂商撑腰,无服务器计算也并非尽善尽美,至少在操作难易度、运行时间效率、开发语言支持等方面仍需完善。同时,由于开发者的代码控制权有所削弱,随之而来的安全性问题也必须引起重视。对于企业客户来说,微服务、容器、无服务器计算只是丰富了更多选项,至于如何在实践中提升效率,还要看开发者对架构和应用的评估,毕竟Serverless Computing不是万能药。 本文转自d1net(转载)

优秀的个人博客,低调大师

Objective-C中的Runtime各大帖子,个人感觉最后的最好

runtime的资料网上有很多了,部分有些晦涩难懂,我通过自己的学习方法总结一遍,主要讲一 些常用的方法功能,以实用为主,我觉得用到印象才是最深刻的。另外runtime的知识还有很多什么是runtime?runtime 是 OC底层的一套C语言的API(引入 <objc/runtime.h> 或<objc/message.h>),编译器最终都会将OC代码转化为运行时代码,通过终端命令编译.m 文件:clang -rewrite-objc xxx.m可以看到编译后的xxx.cpp(C++文件)。比如我们创建了一个对象 [[NSObject alloc]init],最终被转换为几万行代码。开这个帖子记录一下看到的一些比较好的runtime的文章。1、详解Runtime运行时机制http://www.code4app.com/blog-721976-204.html(亮点:本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机)2、OC实用的runtime总结http://www.code4app.com/home.php?mod=space&uid=721976&do=blog&quickforward=1&id=205 (亮点:通过自己的学习方法总结一遍,主要讲一些常用的方法功能,以实用为主)3、DEMO 按钮点击,利用runtime hook 实现iOS防止按钮连续响应点击http://www.code4app.com/forum.php?mod=viewthread&tid=7271&extra=page%3D1%26filter%3Dsortid%26sortid%3D1(利用runtime hook 实现iOS防止按钮连续响应点击 可以设置时间间隔,拖进工程立即生效)4、DEMOruntime 详解http://www.code4app.com/forum.php?mod=viewthread&tid=8241&extra=page%3D1%26filter%3Dsortid%26sortid%3D15、DEMOiOS Runtime 实践http://www.code4app.com/forum.php?mod=viewthread&tid=7638&extra=page%3D1%26filter%3Dsortid%26sortid%3D1(亮点:通过DEMO方式实践iOS中的黑魔法runtime)6、学习 runtime的简单项目http://www.code4app.com/forum.php?mod=viewthread&tid=7201&extra=page%3D1%26filter%3Dsortid%26sortid%3D17、根据规则跳转到指定的界面(runtime实用篇一)http://www.code4app.com/forum.php?mod=viewthread&tid=10131&extra=page%3D1%26filter%3Dsortid%26sortid%3D1 8、Objective-C 中的runtimehttp://www.code4app.com/home.php?mod=space&uid=800778&do=blog&quickforward=1&id=282 Objective-C中的Runtime http://www.jianshu.com/p/3e050ec3b759 Objective-C Runtime http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册