Tag Archives: apple

[技术贴]苹果如何制造排队

crowded_queue

最近iPad2上市居然再次掀起排队热潮,和之前相比更是越来越火热.昨天甚至发生了三里屯的打架事件,相传苹果店员直接干翻了4位黄牛,最后价值30w的大门也被群众摧毁,于是店长宣布三里屯再次停业.

网上有说苹果也学国内公司租人排队,但我觉得下文的分析更可靠些,开始揭开苹果的另一个阴谋:

大家都知道苹果产品每每发布就排队抢购的事情. 往年iPod发布也这样,只是现在大家都有了所以就不去挣了.
而这个排队现象如何形成的呢?

首先如果只有几个人去买肯定形成不了排队, 而在心理学上叫做 Lining 效应 , 排队效应 .
而这个就是一种人性的弱点, 好比你看一个饭馆排队 下意识认为这个饭馆菜一定好吃.

如果你看到有人打架 围观人越多你会觉得事情越大.
之所以看热闹不嫌事儿大的道理. 苹果也将这种心理战运用到产品营销上.

首先当苹果要发布产品的时候会用尽各方人马通知人来到店购买. 并且通过店面摄像头与数据分析得出目前排队长度.
一般内部流程将人们的等待时间控制到45分钟到47分钟, 这个时间段是经过科学分析和实验的. 这个时间属于人们等待耐心的一个高峰.

在国内如果商家看到门口排了队伍首先就是要加快收银速度因为很多地方都是客户已经拿到物品等待付款. 如果时间超过19分钟人们就到了烦躁周期的第一波 会有26.4%的购物者选择不付款直接离开.

所以苹果将购物流程改为让购买者先不要得到物品, 实行一手交钱一手交货的销售方式来发挥排队效应.
一般在Apple Store所有的员工都有一个快速结算系统, 就是不管你在哪苹果的工作人员都可以帮你刷卡支付无需到款台.

当苹果需要创造排队效应的时候, 苹果按照数学模型来分析人群然后将在结算桌面上得出一个结算的时间.

这结算时间就是告诉结算的员工您需要浪费多长时间来结算一个客户. 比如如果外面有1000人排队 ,
那苹果一般就只开1 到 3个收银台, 每个付款时间需要至少到 17分钟.

而一般结算时间只有55秒.

这样就造成了 货少难买现象, 而从人性弱点出发 , 越得不到的越好 , 越多人抢的越好 , 而人们也会计算时间成本, 就是已经排了47分钟 不在乎再排47分钟了.

而且当您付款后的时候 , 苹果一定会告诉您, 您终于拥有了您的xxxx产品, 只字不提我们已经拥有了你的钱的事情.

如这个事情搁小时候老人总给我说 把自己卖了还帮人数钱就是这个道理吧.

说得有点多 , 或许这套排队理论国内的厂商也可以在适当的时候运用一下 , 而不是花钱雇人来形成排队效果那是在是太没品味了.

路人甲:有感触 我也纳闷为啥每次就开这么俩款台 其他人都外面欢迎
坑爹啊

[声明,本文转载自这里]

WebView 小技巧

apple 把 webview 封装的实在太简单了.

留给开发者只有寥寥几个api,甚至连scrollview的基本操作都没法完成.

不过下面这个方法

stringByEvaluatingJavaScriptFromString:String

还是给了些希望.

搜索后发现果然javascript提供了一系列移动页面的操作

  • window.pageYOffset   获得当前页面的偏移
  • window.scrollTo(x,y) 将页面偏移到指定位置

这样我的需求就实现了.当然js能做的事情太多了,给webview换一套css也不是不可能的.

好像 Reeder 以及 便携百科ipad 就是这么做到的吧. 这两款软件都做得相当完美,体验上也无可挑剔.作者确实费了不少心血.

用心的产品才能引起共鸣.

Apple 发疯了

Apple 发布了 os4.0

新的Game Center -> openFeint , Plus+ 等第三方平台怎么活下去。矛盾开始了

iAD -> 公开指责 google ,又一个敌人

以及 3.3.1

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).

这下 unity 和 即将来临的flash也被一棍打死了。

unity3d 论坛火爆讨论

Adobe 目前在twitter上的声明 :AdobeWe are looking into the new SDK language. We continue to develop Packager for iPhone OS which will debut in Flash #CS5

当然cocos2d 也赶紧来了个声明,哈哈不关我的事

永远的扫雷英雄(开源) 登场

开源小游戏 永远的扫雷英雄 登场!

写这个游戏的目的就是想写个小教程,后来想想文字就算了,有问题直接留言或邮件更直接. :)

源码:http://github.com/xhan/minesweeperever

游戏介绍

MINE SWEEPER EVER是经典的扫雷iphone版本.你可以在app store上免费下载 Link

mainShot-MineSweeperEver

你可能可以学到什么

  • 一个完整的游戏(片头,菜单,光卡,排行榜)
  • 基本UIKIT界面的使用,手写和nib的混合
  • 不同界面间传递消息
  • 播放视频
  • 简单游戏的状态机
  • UserDefault的使用和简单的排行榜

在编译之前

由于资源文件比较多,开场视频是大头,还有许多策划时涂鸦使用的ps文件,请移步下载 http://ixhan.com/kill/MineSweeperEver-Resource.zip 到当前目录并解压.

为什么写这个小游戏

半年前(May 2009)做毕业设计(PlutoCMS)的时候头昏脑涨,逐下载了iPhoneSDK把玩下,原意是测试下学校带宽并看看iPhone模拟器是什么样子的.结果控制不住看了 iPhone cookbook ,记得第一章有个教你嵌套绘制图层 和 响应手指点击的 两个片段 .于是就想到了由两个技术做个扫雷绰绰有余,两个晚上后做了个只能扫雷不能放置旗帜的半成品就撒手不管.继续回头研究俺的毕业设计了.

离职后的这段时间刚好有些空闲,决定把之前未完成的东西收尾,并开源给有需要的人.花费了一个下午修改完善了下之前的代码,又花了一个晚上和一个早上把其他东西(几个界面,排行榜)添加了上去.最后是UI方面,第一个晚上画了个logo,简单策划了下大概需要的素材,还找了美工朋友帮我画了个坑,可是第二天在ps中做素材发现还是无法掌控美术上的东西,干脆决定用windows上经典的界面.

等待9天后通过审核,然后在那天上海iphone会议上才在mars的真机上见到自己的程序(惭愧呀,iphone因经济危机被我卖了),感觉还不是特别糟糕.哈哈.

许多特性没来得及加上去:

  • 互联网排行榜功能
  • 退出保存当前状态功能
  • 左右手不同界面
  • 长按或双击添加/取消 旗帜功能
  • 荣誉系统 ,包括炸死次数,成功次数,等等.

不过作为一个简单的教程应该还是够了.可能再过几个月闲的没事会改改~.

源码:http://github.com/xhan/minesweeperever

栽大了之Objc过度释放对象

事情是这样的,4个月前我写了份实现类似下拉框选择操作的界面.
一个月前,发现了这个View 在dealloc 会crash掉.
多次调试无果,上 devForum.apple.com 询问也无人问津.
今天决定再次调试下,还是没找到哪里出问题.
最后决定求助 cocoachina 上的现场观众
最后开始一行一行的注释代码做终极调试.

离谱的事情发现了,只要我创建一个名为 mainText 的 UILabel ,在dealloc 中程序就会crash ,改成其他名字无事.难道是apple的bug? 新写了个view测试了,还是没问题.

接着接着就发现了在dealloc方法中:
[mainText release] ,mainText = nil;
// NSLog(@"release %@",bgView);
[bgView release];
// NSLog(@"release %@",originView);
[originView release];
// NSLog(@"release %@",labelArray);
[labelArray release];
// NSLog(@"release %@",mainText);
[mainText release];

该死的,不知道当时那根神经错了,居然释放了两次,当然出错咯.问题也解决了.

所以在确认释放对象的情况下一定要写成:
[instance release],instance = nil ;

个人经验是,对于objective-c的内存管理都是得经过磨练才出来的,前期多犯错误是好事情.
当然我认识一个朋友 ,他不释放任何对象,因为反正关闭iPhone后系统会处理的.这种觉悟不是大部分程序员有的,大家还是稳步前进咯.

Things I’ve done int past 5 months

It’s awfully to say that Time is running out fast , but it really does.

I’ve been working as a iPhone application developer for five months  ,devoting all my energy to my job . Thanks to company’s trust , now I am the core architect and team leader of our small group .

We’ve redesigned most of default iPhone UI components which is  really a difficult job at first . After a several  days of hardworking  ,We released first custom components named ‘MeeTabBarController’ , which is more powerful , flexible, and has ability to manage animations for each tabBar ,each container view’s opening animations and  closing animations. It really works great and appears amazing.

Since now We’ve achieved the custom NavigationController, which has more delegate methods , a incredible user interface  and animations. the custom alertView , the custom tableViewController , the custom spring board , the custom http-client for fetching remote data , etc .

It would be no exaggeration to say that our custom framework is just another lite version of Three20 .^^

Here is a Preview version of Our Project:

NameLinesFiles
Third part header236034
Third part Source491638
Project Header7222170
Project Source28330173
Total42828415
Total Pngs431

Here is a snap shoot of our another application which had submitted to apple store and ready for sale .
It just a simple application that in order to test whether our designs and functions will be rejected or permitted by apple ,Thankfully ,after a mistake that was rejected by undocument api  ,It’s status came out to be  ready for sale finally.



You can search it by type its name “Grading” ,it’s also based on our custom framework and I cost 3 days to finish it.
Give a try and feel free to comment it !(Note : we put off the sale date of this application for the moment by some conditions)