How to add CGPoint to NSMutableArray

CGPoint is a C structure not an object. So you can’t add CGPoint to NSMutableArry directly.
But you can use NSValue to convert it to object. like this:

1
2
3
CGPoint point = CGPointMake(0.0,0.0);
NSValue *pointValue = [NSValue valueWithCGPoint:point];
[nsarray addObject:pointValue];

It is very simple to get this value .

1
CGPoint point = [[nsarray objectAtIndex:i] CGPointValue];

Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects

今天在声明一个类属性的时候遇到了这样一个错误 “ Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects” 。我类声明文件 ( .h) 如下:

1
2
3
@interface MyNoteViewController:UIViewController
@property (nonatomic, strong) NewNoteViewController *newNoteViewController;
@end

然后在我的执行文件 (.m) 中如下的地方就会出现这个错误:

1
@synthesize newNoteViewController = _newNoteViewController;

找了半天,看了半天也没有发现到底是那的错误,最后在StackOverFlow上面找到了答案,原来在iOS5中,如果你的项目支持ARC的话,那么你的property的名字不能以new开头。具体的原因在这里 http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

To allow interoperation with manual retain-release code, ARC imposes some constraints on method and variable naming:
You cannot give a property a name that begins with new.
悲催的bug,要谨记啊,一定要尽量的避免使用new这样的关键字作为变量的开头,说不定哪天就出现了问题。


arc enforces new rules

iOS5中,引入了ARC的功能,具体概念如下:

Automatic Reference Counting (ARC) is a compiler feature that provides automatic memory management of Objective-C objects. Rather than having to think about about retain and release operations, ARC allows you to concentrate on the interesting code, the object graphs, and the relationships between objects in your application.

ARC主要就是为Objective-C提供了一种自动的内存管理功能。因为在以前的项目中,在内存管理方面,要认为的去做很多大量的重复性的工作。现在有了ARC之后,我们可以更好的专注自己的代码逻辑。一个新的功能的引入,必然会有一些新的规则出现,所以我们在使用ARC的时候要注意一下几点:

  • 不用再去调用dealloc,retain,release,retainCount或者autorelease这些方法了。也就是说我们在代码中不需要这些了,是不是轻松很多啊。省去了代码中超级多的release。
  • 不能使用NSAllocateObject和NSDeallocatedObject。
  • 不能在C structires中使用对象指针。
  • There is no casual casting between id and void *.
  • 不能使用NSAutoreleasePool,取而代之的是@autoreleasepool,你可以在你生成代码的main.m文件中看到这一变化。
  • 不能使用memory zones,也就是说不在需要NSZone了。
  • 还有一点就是在属性声明的时候,属性的名字不能以new开头。 (如果使用了,那么产生的错误,可以参考 Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects).
    以上内容取自ARC Enforces New Rules

random or arc4random

如果在你的程序中,要使用到随机数,可能第一反应就是使用random()。但是在今天我看了一段代码之后,里面用到的是arc4random()而不是random()。所以就查了一下到底两个之间有什么区别。

不查不知道,一查才了解到,原来在随机数生成的选择上还是挺有讲究的。除了上面的arc4random() 和 random()之外,还有经常用到的rand().

它们之间的区别,用Google找到了一些信息。可以参考下面的内容:
http://stackoverflow.com/questions/2794201/whats-the-difference-between-arc4random-and-random
http://stackoverflow.com/questions/328950/c-the-definitive-truth-about-rand-random-and-arc4random
http://iphonedevelopment.blogspot.com/2008/10/random-thoughts-rand-vs-arc4random.html

其中的大体意思都是说arc4random()是产生随机数的首选方案,因为random()产生的是一个可预测的伪随机数,不适合用于安全要求高的情况下。而arc4random()是一个不太可预测的伪随机数,在用到安全性有要求的情况下,arc4random()要优于random()。而如果没有安全性要求的话,random()也是一个不错的选择。在上面提供的参考连接中还提到,rand()是标准C的一部分,而random()是POSIX的一部分,而arc4random()是只有BSD系统才提供的。所以在你要产生随机数的时候,一定要考虑好到底能不能用,和使用的环境是什么。在iPhone开发中,首推arc4random()来生成随机数。


iOS UI Design resource

在App store里面有很多的优秀应用,它们的设计都很赞,很多都值得我们去学习一下。多看看优秀的设计会激发我们更多的灵感,提高自己应用程序的UI设计水平,增强用户体验。

以下是一些不错的专门收集应用程序UI截图的网站:

For iPhone:

For iPad:

For iPhone and iPad:

还有一些个人博客收集了一下他们喜欢的UI设计:

好了如果你有什么好推荐,也可以留言,我会添加进来。
以上所有链接的地址都来自http://www.cocoanetics.com/2011/11/steal-good-stuff-ios-design-pattern-collections/



Github vs Bitbucket

现在网上有很多代码托管网站,其中比较著名的有github, bitbucket和google code.但是就我现在个人的使用来看,我比较偏爱github 和 bitbucket. 所以不免将它们拿来比较一下,看看那个更适合自己。

在支持的版本控制工具上: github目前只支持git一种,而bitbucket现在则除了支持git之外,还Mercurial (hg)。这两个工具都很多教程,并且你如果会使用git的话,那么hg你也会很快上手,反之亦然,它们很多的命令都通用。并且他们的原理相同。但是在python开发人员中,似乎大家比较偏爱hg,因为hg就是用python来开发的。不过我个人倒是比较喜欢git,也许是最开始就是从git学起的吧。并且git作为Xcode内置的版本控制工具,在使用Xcode开发项目的时候,非常好用。如果有兴趣可以看一些WWDC 2011的一个视频 – Mastering Source Control in Xcode 4. 此外在GUI的版本控制软件上,我推荐Source Tree,即支持git又支持mercurial。

在网站的界面方面:github给人的感觉更加的干净整齐,看上去很舒服,而bitbucket则要差一点,至少给我的体验是这样的。

在私有和公有项目方面:github对于免费用户来说只支持公开的项目,不支持私有项目,如果需要私有项目,需要升级到付费的用户。并且对于免费的个人用户来讲,现在的代码托管空间是0.3G,不过我想对于一般用户来说应该已经足够了。bitbucket在这方面则要大方的多,你可以使用bitbucket任意的创建自己的私有或者公有代码仓库,并且不限制大小。所以对于你不想公开的代码来讲,bitbucket是首选。

其他方面:个人认为在代码的显示方面,github要好于bitbucket. github上的代码高亮显示优于bitbucket,并且你能在github上面编辑自己的代码,但是在bitbucket上面则做不到。

总结:就个人感觉来说,我更喜欢使用github,因为我觉得很舒服,并且速度快(可能和我的网络有关系)。而bitbucket在支持私有项目方面又让我相当难以割舍。所以具体到你要选择哪个,完全取决于你的权衡了。