`

Delphi编程注意事项--转

 
阅读更多

 Delphi编程注意事项

任何单元必须有对应测试单元,任何类和函数必须有对应的测试函数,允许合并少于3个关联测试函数,即一个测试函数同时测试3个函数。 PObj继承下来的对象是需要释放的,所以返回值上禁止出现PObj继承下的对象,也就是说不允许在函数里New对象并返回。
例: [禁止] function SomeOne():PStrList;
如果需要传递对象参数则放在函数参数里,这样就由调用者来创建和释放对象。
例:[允许] function SomeOne(list:PStrList):boolean;
当然,NewXXX之类的创建对象的函数除外。一直存在的全局对象也除外,这些全局对象将在初始化时创建,结束时释放。
类定义中如果重载了Destory必须在里面加上inherited,否则不会释放的。 使用对象(object)还是记录结构(record)。
在有关性能方面的服务程序中:
只产生单个实例或少于10个实例则允许使用对象。
否则一律使用记录结构。
在GUI方面都使用对象,但是不得超过五级继承。
纯数据信息必须使用记录结构。
错误、异常处理规则:
1.Test,Check,Is开头的函数并不抛出异常,只检验。
2.其他函数遇到错误或异常都要抛出异常,使用raise显式抛出,
并且在函数文档中注明抛出异常的种类,方便使用者处理。
3.如果需要屏蔽异常,则显式地写try..except语句拦截。

禁止使用无类型参数:
由于无类型参数会导致一定地混乱,因此禁止任何函数拥有无类型参数。如果遇到使用无类型参数的系统函数,则作转换即可。
例:无类型参数=> var buf;
使用指针代替=> const buf:Pointer;
使用无类型参数的系统函数=> FileRead(handle,PChar(buf)^,len); 创建和释放
在什么情况下使用free,什么情况下使用freeandnil。
1.free之后不再使用的函数局部变量要使用free。
2.全局变量或者Free后继续使用的变量要使用FreeAndNil;
Utils里的FreeAndNil是检查过是否assigned之后再调用free,
而kol里的Free_And_Nil是不检查指针状态的。

任何KOL对象中string的成员变量必须在destory时赋成'',否则会造成内存泄漏的,因为在Destory中不释放huge string。
而TObject是没有这种情况的,因为在CleanInstance中释放了huge string。
自定义KOL对象,如果是继承已有对象,可以在Destory中释放额外的内存,不要继承Clear。

TList是可以释放对象的,不需要另外继承。
而TTree是不能释放对象,可以另外继承后释放对象。
尽量少用Crack类,以避免混乱。 注释
单元
所有的单元都用规定的单元头,如下:
{**
@abstract(|)
@author(magicgod<magicgod@gmail.com>)
@cvs($Date: 2006-04-13 03:07:16 +0800 (鏄熸湡鍥? 13 鍥涙湀 2006) $)
@created(%Date%)
@changelog(
)@br
@todo()
@comment()
@br
}
abstract:单元名称
author:单元作者,可以放多个
cvs:只接受 $Author$作为作者的同意词,$Date: 2006-04-13 03:07:16 +0800 (鏄熸湡鍥? 13 鍥涙湀 2006) $作为lastmod的同意词:最后修改时间。
created:创建时间。
changelog:本单元修改历史,自动生成文件。
todo:准备要做的任务。
comment:详细说明和注释。

函数
所有的函数按照以下方法注释:
{**
@param(...)
@return(...)
@raises(...)
}
param:参数,可以有多个,标明参数名、值范围和功能说明。
return:返回值。
raises:可能抛出异常。
函数内部开头必须写上函数思路,除非是简单地返回。
重要算法必须写明思路,测试用例中必须有算法的详细测试。

变量
变量定义按以下方法注释:
{**...}
说明变量的值范围和功能, 由谁初始化,什么时候初始化,什么时候被释放即生命周期。 单线程不用考虑线程安全的问题,而多线程则需要考虑线程安全。
线程类实例会创建自己独立的栈(由线程函数ThreadProc隐含创建),而普通类是使用主线程栈的。 这就是意味着,在子线程中使用局部变量是安全的,因为局部变量是分配在栈中的。 各个线程都有自己的栈(包括主线程),而且一般情况下是无法直接访问别的线程的栈空间的, 除非是一些极端的情况(如将局部变量通过指针传给其它线程供操作),局部变量都不需要访问冲突保护。
同步。
同步的意思就是协调一致,保证不发生冲突。
保持同步使用的办法就是临界区。

线程中的字符串连接竟然会引起内存泄漏。可能是bug。例:
[禁止]:DataDebugLog('ExecuteOperate','thread:'+int2str(sender.Handle)+' xpath:'+cache.xpath); //会引起内存泄漏
[允许]:
t1:=int2str(sender.Handle);
t2:=pchar(@cache.xpath[0]);
t3:= 'thread:'+t1+' xpath:'+t2;
DataDebugLog('ExecuteOperate',t3);
//一定要释放
t1:='';
t2:='';
t3:='';
分享到:
评论

相关推荐

    Python4Delphi for Delphi 3-7 Full Source.rar

    - **Kylix Notes.txt**:Kylix是Linux下的Delphi版本,此文件可能包含了在Kylix环境下使用Python4Delphi的注意事项。 - **Deployment.txt**:部署指南,详述了如何在目标系统上正确地部署Python4Delphi应用程序。 ...

    汉字转全拼 delphi版

    标题中的“汉字转全拼 delphi版”表明这是一个使用Delphi编程语言开发的应用程序,它的主要功能是将汉字转换成它们的全拼形式。在IT领域,全拼是指汉字的拼音表示,通常用于输入法或者文本处理,使得计算机能够识别...

    java delphi 互相调用 xml-rpc实例

    7. **优化与注意事项**: - 安全性:由于XML-RPC基于HTTP,所以数据传输可能面临安全风险。需要考虑加密传输,防止中间人攻击。 - 错误处理:确保在客户端和服务器端都有适当的错误处理机制,以便在调用失败时能...

    Delphi-GUI-Programming-with-FireMonkey-master.zip

    7. **移动应用开发**:针对移动平台,如iOS和Android,讲述特定的开发策略和注意事项,如通知、地图集成和推送服务。 8. **性能优化**:提供关于优化代码和资源管理的技巧,以确保应用程序在各种硬件配置上都能流畅...

    Delphi 11.3 Android实例-录音与回放(播放MP3)

    5. **优化与注意事项**: - 音频文件的处理应考虑到内存管理和性能优化,避免长时间录音导致的内存占用过大。 - 用户体验方面,应提供清晰的UI反馈,如显示录音时间和播放进度。 - 考虑到不同设备的硬件差异,如...

    这本书是面向初学者的 Delphi 编程入门指南

    - **类型转换**:讲解在不同类型之间进行转换的方法和注意事项。 **MODULE 4. Standard Math Functions** - **标准数学函数**:介绍Delphi内置的数学函数库,以及如何使用这些函数进行数值计算。 **MODULE 5. ...

    SQLite3 Delphi Components for D7-XE.FullSource.zip

    SQLite3 Delphi Components for D7-XE.FullSource.zip是一个包含Delphi编程环境下使用SQLite3数据库的组件源码的压缩包。这个压缩包主要是为Delphi 7到XE版本的开发者提供一套完整的SQLite3数据库集成解决方案,使...

    SkinForm(delphi5-6-7-9)100%能用

    SkinForm是针对Delphi编程环境的一套界面美化组件,支持从Delphi 5到Delphi 2009的多个版本。它通过预设的皮肤模板,可以轻松改变应用程序的标准控件样式,如按钮、编辑框、菜单等,从而打造出独具特色的用户界面。...

    delphi经典编程入门完美修正_单文件版.zip_delphi_delphi编程入门

    "注意事项.txt"文件可能包含了一些在使用教程或进行Delphi编程时需要注意的要点。这些提示可能涉及代码规范、错误处理、内存管理等方面,对于避免常见问题和提高编程效率非常有帮助。阅读并遵循这些提示,能够使学习...

    DelphiWebsockets-master.zip_delphi websocket_websocket_websocket

    在Delphi编程环境中,WebSocket技术可以极大地提升应用程序的交互性和实时性,尤其是在开发需要实时数据更新的桌面或移动应用时。 DelphiWebsockets-master.zip是一个包含Delphi WebSocket实现的项目资源压缩包。这...

    Delphi 多线程编程

    #### 四、Delphi多线程编程技巧与注意事项 - **线程优先级调整**:在某些情况下,可能需要调整线程的优先级以优化资源分配。可以通过`SetThreadPriority`函数来实现。 - **异常处理**:在多线程环境下,异常处理尤...

    Delphi数据库编程讲座

    readme.html文件通常包含教程的简介、使用指南或者注意事项,可能提醒读者关于文档的结构、软件需求,以及如何启动和导航教程内容。 down.91.com下载站.html可能是当时提供下载资源的网站页面,虽然无法直接获取其...

    delphi-string互相转化为byte数组

    在Delphi编程环境中,字符串(String)与字节数组(Byte Array)之间的转换是常见的操作,尤其是在处理二进制数据、网络通信或者文件读写时。本文将深入探讨如何在Delphi中实现这两种类型的数据互换。 1. **字符串...

    C++头文件转delphi工具

    此外,包含的`readme.txt`文件通常会提供工具的使用指南、注意事项以及可能遇到的问题解决方案。确保仔细阅读这份文档,以获取关于工具的详细信息和最佳实践。 总的来说,"C++头文件转Delphi工具"是一个方便的桥梁...

    chakracore-delphi.rar

    7. **挑战与注意事项** - 跨语言内存管理:协调ChakraCore的垃圾回收机制与Delphi的内存管理,避免内存泄漏问题。 - 错误处理和调试:在ChakraCore与Delphi混合编程中,如何进行有效的错误跟踪和调试。 8. **未来...

    delphi编程助手

    而“readme.txt”通常包含了软件的使用说明、版权信息或者开发者联系方式,用户在使用前应先阅读这个文件,了解软件的基本操作和注意事项。 值得注意的是,由于这是一个从网上下载的EXE程序,可能存在安全风险。在...

    Mastering Delphi 7--Code

    2. **readme.txt**:这是一个常见的文本文件,通常包含有关压缩包内容的重要信息,如编译、运行代码的注意事项,或者作者提供的额外说明。在学习这些源代码时,首先阅读此文件是至关重要的,它能帮助我们了解如何...

    delphi用BusinessSkinForm支持delphi7-delphi2009

    在Delphi编程环境中,界面设计一直是开发者关注的重点之一。一个美观、易用的界面能够极大地提升用户体验,而“皮肤”就是实现这一目标的重要手段。BusinessSkinForm是一款为Delphi开发的皮肤支持组件,它允许开发者...

    delphi流相互转换

    ### 注意事项 在进行这些转换时,需要注意编码问题。Delphi默认使用ANSI编码,但在处理字符串时可能需要考虑Unicode编码,特别是当处理多语言或非ASCII字符时。确保正确设置流的编码以避免字符乱码。 此外,效率也...

    Delphi编码规范和注意事项

    Delphi编码规范和注意事项是指在使用Delphi语言进行编程时所需要遵守的一系列规则和约定,以确保编写的代码清晰、可读、易维护和高效。在本篇文章中,我们将详细介绍Delphi编码规范和注意事项,包括源程序书写规范、...

Global site tag (gtag.js) - Google Analytics