用python做 网站论坛,网站做关键词,网站管理后台登录地址,石家庄心雨网站建设192个加分的回答#xff1a; 有些初学时的做法#xff0c;现在我认为是不标准的。 1) 有了property#xff0c;在“私有”的成员变量前面不再使用_前缀。如果一个成员变量可以被其他的类访问#xff0c;那就应该用property。我不喜欢“_”前缀#xff0c;它会… 192个加分的回答 有些初学时的做法现在我认为是不标准的。 1) 有了property在“私有”的成员变量前面不再使用_前缀。如果一个成员变量可以被其他的类访问那就应该用property。我不喜欢“_”前缀它会把代码弄得非常丑陋现在终于可以不用它了。 2) 说起来私有我倾向于把似有方法定义在.m文件里放在一个私有的category内如下 #import MyClass.h  interface MyClass () - (void) someMethod - (void) someOtherMethod end  implementation MyClass Why clutter up the .h file with things outsiders should not care about这句怎么翻译说不准.m文件里的空括号的作用是私有category如果你不实现里面声明的方法会引发编译警告。 3) 我把dealloc方法放在.m文件的顶部紧挨着synthesize语句。需要dealloc哪些东西难道不应该是你考虑一个类的时候的首要问题么尤其是在iPhone这种环境下。译注我也是这么做的dealloc和init之类的放在一起可以对照。默认的模版把dealloc放在最后面不利于对照也容易让人忽视dealloc 3.5) 在table cell里为了性能令所有的元素不透明包括cell本身。也就是说每个东西都设置恰当的背景色。 3.6) 使用NSURLConnection时你应该实现下面的delegate方法 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection                   willCacheResponse:(NSCachedURLResponse *)cachedResponse {       return nil; } 除非你希望缓存response否则你大多数时候会觉得web调用都是反常的尤其是web service调用。如上实现这个方法可以避免缓存任何的response。 4) 避免double。iPhone原生不支持任何的double精度运算。它们是使用库来模拟的。仅在你必须使用的时候使用double精度例如CoreLocation。在数字常数后面使用f后缀令编译器把它们当作float处理。 float  val    someFloat  * 2.2f; 更重要的是当someFloat是double的时候你不需要混合精度计算因为val已经把精度损失掉了。更新在3GS上发生了些变化更应该用float了 http://stackoverflow.com/questio ... float-on-the-iphone 即使在某些手机上看起来计算不同精度速度一样但是float可以放更多数据在寄存器里所以还是会快很多。(译注程序不是计算为主的就不必那么在乎了。) 5) 把property设置为nonatomic。atomic是默认值是同步的会自动加入同步代码避免在多线程时发生问题。但是99%的情况下你的property不会在多线程环境下访问用nonatomic可以避免代码臃肿提高效率。译注也就是说如果要在多线程环境下访问property切记用atomic或者自行加锁 6) SQLite保存大数据集非常非常快。例如地图程序应该把图块缓存在SQLite里。最昂贵的部分是硬盘I/O。要避免在大块之间产生大量的小的写入就需要用BEGIN; 和COMMIT;。我们使用2秒钟的计时器去重置每次新的提交。一旦计时器国企就发送COMMIT;这样所有些操作就写到一个大块里面了。SQLLite把事务数据保存在磁盘上使用Begin/End包装可以避免产生大量的事务文件把所有的事务写到一个文件里。 当SQLite在主线程的时候会阻塞你的界面。如果你执行非常长的查询一个好办法是把你的查询保存成静态对象然后在另一个线程查询。把所有会修改数据库的查询用synchronize() {}块包起来。短查询就放在主线程简单方便。译注我在多线程里面使用SQLite的方法更简单用sqlite3_open_v2打开数据库flag用SQLITE_OPEN_FULLMUTEX这样SQLite的所有函数就是线程安全的了不需要synchronize了不过哪个效率更高我不知道。 更多SQLite优化技巧在此虽然文章很老但是观点貌似都还对 http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html 61个加分的回答 以前outlet的内存管理没什么好办法。现在的最佳实践是把outlet声明为property interface MyClass :NSObject {      NSTextField *textField;  } property (nonatomic, retain) IBOutlet NSTextField *textField; end 使用property内存管理语义更清晰同时给其他的实例变量组织提供了一个统一的模式。 译注这条值得商榷一般来说不需要跨类存取的变量是否是IBOutlet我都认为尽量不要声明为property。这篇问答比较早有很多信息也许不够新了。翻出来主要是给大家参考的。 57个加分的回答 使用LLVM/Clang静态分析器 原文我不翻译了最近的Xcode版本都已经内置包含了LLVM/Clang静态分析器使用方法很简单   Xcode3系列使用热键ShiftCommandA   Xcode4系列使用热键ShiftCommandB 为了保证效果使用静态分析器前最好ShiftCommandK清除一下Build。 静态分析器可以分析出很多滥用不和规范的用法特别是能够帮你找到潜在的内存泄漏。但是它不是万能的如果你的代码逻辑很乱尤其是内存管理大量都不符合规范那么它也可能给出错误的建议。它的建议起作用的前提是你大量的代码都符合Objective-C和Cocoa的规范有少部分代码忘记了release之类的那么它会给你很好的建议。 所以永远都没有神仙皇帝好好写代码是基础。 另外一个57个加分的回答 使用标准的Cocoa命名和格式规范以及术语。规范的好处是和别的Cocoa开发者合作的时候更方便。 例如应该做和不应该做的 *  在对象的interface里不要声明id m_something不要把它叫做成员变量或者字段使用something或者_something(这个现在也不建议了)作为它的名字叫它实例变量。 * getter不要叫-getSomething应该为-something;。 * setter不要叫做-something应该叫-setSomething:。 * 方法名由参数和冒号组成形如-[NSObject performSelector:withObject:]而不是NSObject::performSelector。 * 方法名参数变量类名使用驼峰式命名由多个单词组成一个名称时单词首字母大写单词间无空格无下划线。 * 类名首字母大写变量方法名首字母小写。 不管怎么做绝对不要用Win16/Win32风格的匈牙利命名法。即使微软在转向.NET平台时也都抛弃了它。 转载于:https://www.cnblogs.com/yingkong1987/archive/2012/12/09/2810121.html