当前位置: 首页 > news >正文

Object-c 一些代码规范

点引用是地道的Objective-C 2.0的风格。它被使用于简单的属性set、get操作,但对象的其它行为不 应该使用它。


Setters中对NSString进行copy 永远不要仅仅retain一个字符串。这避免了调用者在你不知道的情况下对字符串作出了修改。不要作出那样的假设:你接受的对象是一个NSString对象而不是NSMutableString对象。

- (void)setFoo:(NSString *)aFoo { [foo_ autorelease];
foo_ = [aFoo copy];

}总结:接受NSString作为参数的setter,应该copy它所接受的字符串。

这从逻辑上遵守了NSString的setter必须使用copy而不是retain。


实现委托模式的类应该:

拥有一个名为delegate_的成员变量来引用委托。 因此,访问器方法应该名为delegate和setDelegate:。 delegate_对象不应该被retained。

不要直接比较BOOL变量与YES/NO。不仅仅这影响可读性,结果可能与你想的不同。

使用nil的检查来检查应用程序的逻辑,而不是避免崩溃。Objective-C运行时会处理向一个nil的对象 发送消息的情况。如果方法没有返回值,就没关系。


总结:不要抛出Objective-C异常,但准备从第三方的调用或者系统调用捕捉异常。


当使用Objective-C++写基于栈的对象的代码时,如果抛出Objective-C异常,对象不会被清 理。(析构函数)


dealloc中对象被释放的顺序应该与他们在@interface中声明的顺序一致


A u to lea se之后reta in

当给一个变量赋值新的对象时,必须先释放掉旧的对象以避免内存泄露。有一些正确的方法来处理 它。我们选择autorelease之后retain的方法因为事实证明它更少地出错。注意大的循环会填满 autorelease pool,并且可能效率上会差一点,但这点折衷我们认为是可以接受的。

- (void)setFoo:(GMFoo *)aFoo {
[foo_ autorelease]; // Won't dealloc if |foo_| == |aFoo| foo_ = [aFoo retain];

}

总结:给对象赋值时遵守autorelease之后retain的模式。


当创建临时对象时,在同一行使用autolease,而不是在同一个方法的后面语句中使用一个单 独的release。

不要调用NSObject类的类方法new,也不要在子类重写。相反,你应该使用alloc和init方法来 创建并初始化一个对象。



转载于:https://www.cnblogs.com/GnagWang/archive/2011/09/29/2195772.html

相关文章:

  • t-sql导出EXCEL语句--待测试
  • 冷月枫林
  • PHP 计算程序运行的时间
  • 文本框自动撑高JQ插件
  • 11.23 IBeamMDAAMembershipProvider 是什么?如何使用?
  • C# WinForm开发系列 - File
  • XML中Xpath语法的使用
  • 9、如何控制框架页面或iframe内嵌页面在指定页面(区域)打开页面? [除了div+css,框架页面也不能忘记]...
  • POJ3590 The shuffle Problem——置换群+DP/递推预处理
  • 生成excel控制类
  • jdk和tomcat环境变量配置
  • SQL中的行号ROW_NUMBER()
  • 使用 CTTeleyphonyCenter 截获来去电及短信消息
  • 翻译]游戏主循环
  • Ural_1126. Magnetic Storms 单调队列
  • Angularjs之国际化
  • CentOS从零开始部署Nodejs项目
  • css布局,左右固定中间自适应实现
  • css的样式优先级
  • Effective Java 笔记(一)
  • FineReport中如何实现自动滚屏效果
  • HashMap剖析之内部结构
  • JavaScript函数式编程(一)
  • js
  • python docx文档转html页面
  • Swoft 源码剖析 - 代码自动更新机制
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 给Prometheus造假数据的方法
  • 聚簇索引和非聚簇索引
  • 每天10道Java面试题,跟我走,offer有!
  • 学习JavaScript数据结构与算法 — 树
  • 正则学习笔记
  • hi-nginx-1.3.4编译安装
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 阿里云ACE认证学习知识点梳理
  • 大数据全解:定义、价值及挑战
  • 如何用纯 CSS 创作一个货车 loader
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #大学#套接字
  • $.ajax()
  • (分享)自己整理的一些简单awk实用语句
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (排序详解之 堆排序)
  • (七)Knockout 创建自定义绑定
  • (一)appium-desktop定位元素原理
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • /bin/bash^M: bad interpreter: No such file or directory
  • @Bean有哪些属性
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [Android]一个简单使用Handler做Timer的例子