雨雪霏霏 – iPhone博客

24 Aug, 2010

follow my heart,转战工业界

Posted by: 雨雪霏霏 In: 励志

经历了在Boston Scientific的实习之后,终于下定决心quit。一方面,如果读完博士仍然需要未知的年数,而这些年里,IT界正在发生革命性变化,我不想错过这个时机。另一方面,做开发是我心之所向,即使不为了职业发展,为了兴趣爱好我也应当走这一条路。

我所感动的是,导师对我的决定很理解和支持。她说她支持我去“follow my heart”。跟随她做科研的三年里,虽然挨了不少批评,但是我学会了怎样去追求完美。我在三年里学过的知识也许会被遗忘,但追求完美的精神被铭刻住了是不会消失的,也会用到我今后的开发之中。

我会有更多的时间去做我所热爱的开发,既是为了生存,更是为了梦想。我也会更多地更新这个博客,记录自己的成长,也帮助每一位有梦想的开发者。

18 Aug, 2010

iOS内存管理系列之一:对象所有权与引用计数

Posted by: 雨雪霏霏 In: iPhone

内存管理是iPhone或iPad开发中最为重要的一部分。掌握好了内存管理,开发出的应用就能运行流畅;掌握不好,开发出的东西就会效率低下,且容易崩溃。从本文开始,我将分几次详细介绍iOS内存管理的方方面面,包括对象的所有权与引用计数、自动释放与便捷方法、访问器方法与属性、一些会改变引用计数的特殊情况、以及一个总结。希望这些介绍会对开发者有所帮助。

本系列文章版权归李晨所有,出版权归华章公司所有,谢绝转载。

-----对象所有权(ownership)与引用计数(retain count、reference count)-----

当一个所有者(owner,其本身可以是任何一个Objective-C对象)做了以下某个动作时,它拥有对一个对象的所有权(ownership):

1. 创建一个对象。包括使用任何名称中包含“alloc”、“new”、或者“copy”的方法。

2. 保留(retain)一个对象。

一个对象可以有多个所有者,一个所有者也可以拥有多个对象。

相应的,引用计数增减的基本规则是:

1.当所有者创建一个对象时,该对象的引用计数为1

2.当所有者保留它时,该对象的引用计数加1

3.当所有者释放(release)它时,该对象的引用计数减1

与此相关的,当一个所有者对于一个对象的引用计数的增减总计为0时,它放弃了对这个对象的所有权。

现在我们可以从两个不同的角度来看Objective-C的内存管理问题。从对象所有权的角度来看,当一个对象有着至少一个所有者(owner)的时候,它依然存在;当它没有任何所有者的时候,它会被释放掉。从引用计数的角度看,一个对象存在时,其引用计数大于零;当一个对象的引用计数为零时,它会调用dealloc方法并释放掉。这两个角度的关系是:在所有权的背后起作用的机制是引用计数机制;我们通过引用计数的增减来理解所有权的概念;但是你只应当使用所有权的概念来管理内存,因为如果你试图直接获取对象的引用计数,那么得到的数将让你感到匪夷所思——系统的一些框架会“偷偷”增减对象的引用计数。

回顾一下,内存管理的目标是:当一个对象的某个所有者依然需要使用它时,保证这个对象的存在;当一个对象的所有所有者都不再需要它时,保证这个对象被销毁。因此只要任何一个所有者在使用完一个对象之后释放掉它,那么以上内存管理的目标就可以实现。我们可以得出任何一个所有者(记住,所有者本身也只是一个对象)所应当遵守的基本步骤:

拥有一个对象 -> 使用一个对象 -> 放弃对象的所有权。

从引用计数的角度来看就是:

还需要这个对象时,保持对其增减为正;不再需要这个对象时,保持对其增减为0

下图很好地诠释了这些基本规则:所有者1和所有者2单独地执行了拥有对象、使用对象、放弃对象所有权的步骤;当所有者1不再需要该对象时及时放弃了所有权,但此时所有者2依然拥有该对象,因此该对象依然存在,所有者2可以继续使用它;当所有者2也不再需要该对象时,也放弃掉所有权,这时对象以不再有任何所有者(相应的引用计数也变为0),因此立刻被销毁掉。

需要注意的是,所有者2只是复制了该对象的指针,并没有使用copy方法,因此复制指针这个操作本身并不增加对象的引用计数;而正因为所有者2希望能使用该对象,因此通过retain方法成为它的所有者,也保证了所有者1放弃该对象时,对象不被销毁。


201008181121.jpg

15 Aug, 2010

日本投降65周年,纪念那些无名英雄们

Posted by: 雨雪霏霏 In: Uncategorized

今天是日本投降65周年纪念日。那场战争中,多少和我们一样的同龄人,他们的生命也刚刚开始灿烂的年华,却不得不以血肉之躯来抵挡枪林弹雨。绝大多数的英雄的名字都不为人所知,他们的青春也不曾有人去记忆。但我们应当去感谢他们的生命的奉献,才让一个古老的民族走到了今天,有机会翻开新的一页!

在此用我微不足道的一点声音来纪念他们!

13 Aug, 2010

为你的iPhone/iPad游戏设置Openfeint(支持Cocos2d)

Posted by: 雨雪霏霏 In: iPhone

今天为我的iPhone游戏添加了Openfeint功能。有不少相关设置,花了我不少时间;发上来希望能对大家有所帮助。完成以下步骤后,你应当能看到下面的Openfeint界面!

201008131435.jpg

简介:Openfeint是一个在线游戏系统,用于iPhone或者iPad游戏计分、挑战、多人对战等。可以在官网免费下载它的SDK。

环境:Openfeint 2.5.1,XCode 3.2.3,iPhone SDK 4.0,Cocos 2d 0.94。

步骤:

1. 将下载好的Openfeint文件夹加入工程之中。

2. 移除其中不需要的文件夹

- 如果你的游戏只支持landscape或者只支持iPad,移除iPhone_Portrait文件夹

- 如果你的游戏只支持Portrait或者只支持iPad,移除iPhone_Landscape文件夹

- 如果你的游戏不支持iPad,移除iPad文件夹

3. 在Project Settings中,

- 选择Build页,Configuration设置为All Configurations

- 找到Other Linker Flags,设置为 -ObjC

- 确保Call C++ Default Ctors/Dtors in Objective-C被打了钩  

4. 添加以下framework

* Foundation* UIKit* CoreGraphics* QuartzCore* Security* SystemConfiguration* libsqlite3.0.dylib (located in (iPhoneSDK Folder)/usr/lib/)* CFNetwork* CoreLocation* MapKit (if building with SDK 3.0 or newer)* libz.1.2.3.dylib (alternatively you can add a OF_EXCLUDE_ZLIB preprocessor definition) 

5. 在工程的prefix.pch文件中加入

#import “OpenFeintPrefix.pch”

6. 使用.mm后缀名(而不是.m)

7. 在Openfeint官网下载offline configuration文件(你每次更改设置都需要重新下载)。将这个文件添加到工程当中。

8. 在应用中加入SampleOFDelegate.h文件

#import “OpenFeintDelegate.h”

@interface SampleOFDelegate : NSObject< OpenFeintDelegate >

- (void)dashboardWillAppear;

- (void)dashboardDidAppear;

- (void)dashboardWillDisappear;

- (void)dashboardDidDisappear;

- (void)userLoggedIn:(NSString*)userId;

- (BOOL)showCustomOpenFeintApprovalScreen;

@end

9. 加入SampleOFDelegate.mm文件

#import “OpenFeint.h”
#import “SampleOFDelegate.h”
#import “cocos2d.h”

@implementation SampleOFDelegate

- (void)dashboardWillAppear
{}

- (void)dashboardDidAppear
{
[[CCDirector sharedDirector] pause];
[[CCDirector sharedDirector] stopAnimation];
}

- (void)dashboardWillDisappear
{}

- (void)dashboardDidDisappear
{
[[CCDirector sharedDirector] resume];
[[CCDirector sharedDirector] startAnimation];
}

- (void)userLoggedIn:(NSString*)userId
{
OFLog(@”New user logged in! Hello %@”, [OpenFeintlastLoggedInUserName]);
}

- (BOOL)showCustomOpenFeintApprovalScreen
{
return NO;
}

@end

10. 在应用启动时加入以下代码;其中launchDashboard一句可以加在其它地方。

#import “OpenFeint.h”

// Initialize OpenFeint on the title screen after you’ve displayed any splash screens.

// OpenFeint will present a modal the first time it’s initialized to conform with apple regulations.

- (void)initializeOpenfeint

{

   [OpenFeint initializeWithProductKey:yourProductKey

   andSecret:yourProductSecret

   andDisplayName:yourApplicationNameForUsers

   andSettings:aDictionaryOfOpenFeintSettings // see OpenFeintSettings.h

   andDelegates:aDelegateContainer]; // see OFDelegatesContainer.h

   // You probably want to invoke this from a button instead of directly here.

   [OpenFeint launchDashboard];

}

- (void)applicationDidBecomeActive:(UIApplication *)application

{

[OpenFeint applicationDidBecomeActive];

}

- (void)applicationWillResignActive:(UIApplication *)application

{

[OpenFeint applicationWillResignActive];

}

- (void)applicationDidEnterBackground:(UIApplication *)application

{

[OpenFeint applicationDidEnterBackground];

}

- (void)applicationWillEnterForeground:(UIApplication *)application

{

[OpenFeint applicationWillEnterForeground];

}


24 Jun, 2010

雨雪霏霏 – iPhone博客 正式推出移动版!

Posted by: 雨雪霏霏 In: iPhone

请大家在手机上看雨雪霏霏的iPhone博客,效果很不一样,很赞哦!标题、日期、评论数目、分类,均一目了然。点进每一篇文章后,文章内容格式均很棒。在此感谢WPTouch,是它使得这一切成为可能。

201006241644.jpg

About

About Google, about Apple, about phones and browsers, about science and technologies.

Subscribe
Page 1 of 912345...Last »