iOS中retain和copy的区别

原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢?

assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。

Retain vs. Copy!!

copy: 建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
那上面的是什么该死的意思呢?

Copy其实是建立了一个相同的对象,而retain不是:

比如一个NSString对象,地址为0×1111,内容为@”STR”

Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化

retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1

也就是说,retain是指针拷贝,copy是内容拷贝。

在Zend Studio 10的Outline中使用的图形标志

在Zend Studio 10中,如果打开Outline View,可以看到当前浏览的文件中对各种元素的图形标志.这些标志方式在其它一些View中当然也是可以看到的.这里记录下,主要是PHP源码文件.

1.图形主体

绿色空心圆: public field

黄色空心菱形: protected field

红色空心方块: private field

 

绿色实心圆: public method

黄色实心菱形: protected method

红色实心方块: private method

 

2.图形附加符号

右上角:

‘S’: 具有static修饰符

‘C’: 这是一个构造方法

‘F’: 这是一个常量或是有final修饰符的方法

‘A’: 具有abstract修改符

 

右下角:

绿色实心三角形: 此方法对父类方法进行了overriding

让nginx支持跨域woff自定义字体

这个问题困扰我很久很久了,之前一直懒得去解决,因为问题只有在firefox下才有。今天使用自己的cdn上的font-awesome时,头疼的问题又出现了,自定义字体生成的icon在firefox下始终出不来,蛋了个疼呀!心里有种特别想把这个问题搞定的冲动,因为对比了下其他网站和自己网站,我似乎发现了问题的关键,不说先,我们先看看问题的现象。正常的状态:正常解析的页面

有问题的Firefox的解析状态:

不正常的页面

自定义字体对应的内容根本出不来,或者说是乱码,看了下其他网站,同样的源码,他们好好的,为啥我的不行呢?看了源码我似乎知道了些什么,按照我的思路,尝试了下,把我的样式和字体文件放在了测试域名下来访问,问题瞬间解决了,笑脸出来啦。原来是跨域资源共享惹的祸!

按照思路,Google了一把,在serverFault找到了解决方案,原理就是允许跨站共享,贴出来啊贴出来~

  1. location ~* .(eot|ttf|woff)$ {
  2. add_header Access-Control-Allow-Origin *;
  3. }

 

在你存放字体的nginx服务器配置文件中的server段内加上上面的代码,问题就搞定了,Firefox也乖乖的显示自定义字体啦!撒花~~

顺便看了下发现某些字体文件也是支持gzip的(woff字体据说已经是压缩过的了,没去验证过…),下面是支持gzip的字体mime列表:

  1. image/svg+xml
  2. application/vnd.ms-fontobject
  3. application/x-font-ttf
  4. font/opentype

你要问我这段加在哪里,我不会告诉你的,哈哈~~好了,问题搞定了,心情也好了,舒坦~

理解cookie的path和domain属性

今天在做验证码时发现一个问题:A、B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了。原因是使用 了同名的cookie来存储验证码。一时找不到解决方法就参考了WebQQ的登录画面,发现tx也没有解决这个问题,也许是觉得这个不算是问题吧。但还是 借这个机会再次了解一下cookie好了。

下面是在网上学习一番后得到的总结(如有纰漏请指正):

1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.test.com/test/test.aspx,那么domain 默认为www.test.com。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问 的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该 cookie的domain设置为t2.test.com。

2.path表示cookie所在的目录,PHP默认为/,就是根目录。在同一个服务器上有目录如下:/test/,/test/cd/, /test/dd/,现设一个cookie1的path为/test/,cookie2的path为/test/cd/,那么test下的所有页面都可以 访问到cookie1,而/test/和/test/dd/的子页面不能访问cookie2。这是因为cookie能让其path路径下的页面访问。

3.浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。

4.含值键值对的cookie:以前一直用的是nam=value单键值对的cookie,一说到含多个子键值对的就蒙了。现在总算弄清楚了。含多个子键 值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存一个自定义的多键值字符串,其 中的键值对分割符为&,当然可以自定义一个分隔符,但用asp.net获取时是以&为分割符。

PHP for windows VC9 VC6区别

一、如何选择PHP5.3的VC9版本和VC6版本

VC6是什么?
VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。
VC9是什么?
VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。

那我们如何选择下载哪个版本的PHP呢?
如果你是在windows下使用Apache+PHP的,请选择VC6版本;
如果你是在windows下使用IIS+PHP的,请选择VC9版本。
二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本

先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。

再来看PHP的两种执行方式:ISAPI和FastCGI。

ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;

而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。

官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。