本文共 2725 字,大约阅读时间需要 9 分钟。
1、字符串
iOS是NSString,必须加*号,指针的形式,同时它是不可变的,可变的是另外一种类型: NSMutableString
WP是string,引用的形式,不加*号;可变使用Stringbuilder
2、逻辑真假
iOS:BOOL, 值取YES 、 NO
WP:bool,值取 true、false
3、单例模式
c#中有三种写法:
第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我……
public class Singleton
{ private static Singleton _instance = null; private Singleton(){} public static Singleton CreateInstance() { if(_instance == null){
_instance = new Singleton(); } return _instance; } }第二种考虑了线程安全,不过有点烦,但绝对是正规写法,经典的一叉
public class Singleton
{ private volatile static Singleton _instance = null; private static readonly object lockHelper = new object(); private Singleton(){} public static Singleton CreateInstance() { if(_instance == null) { lock(lockHelper) { if(_instance == null) _instance = new Singleton(); } } return _instance; } } 第三种可能是C#这样的高级语言特有的,实在懒得出奇public class Singleton {
private Singleton(){}
public static readonly Singleton instance = new Singleton(); }iOS主要有两种:
第一种:
在上面的代码中(用到了关键字@synchronized是为了保证我们的单例的线程级别的安全,可以适用于多线程模式下。)static变量sharedCLDelegate用于存储一个单例的指针,并且强制所有对该变量的访问都必须通过类方法 +(id)sharedInstance,在对 +(id)sharedInstance第一次调用时候完成实例的创建。这里值得留意一下的是,上面代码中用的是[[selfclass] alloc],而不是 [MySingletonClass alloc],一般情况下这两种写法产生同样的效果,但是这里这样做是为了更好的利用OOP的性质,[selfclass]可以动态查找并确定类的类型从而便于实现对该类的子类化。
第二种:
使用dispatch_once,这个方法的意思是在应用程序生命周期内,这方法只执行一次,这就是ARC下结合GCD的一个单例的代码
但是iOS的单例模式有个弊端,它不能private Singleton(){}这样声明构造函数为私有,仍然还是可以通过 [[Singleton alloc] init]来使用。
4、类方法和实例方法
iOS:"+"表示类方法, "-"表示实例方法
WP: static表示类方法,不加static表示实例方法
参数的写法也有很大的区别,C#跟C/C++是一家子,写法一样。
5、宏定义
iOS:可以使用#define来进行常量的定义,跟C、C++一样
WP: 不支持define的定义,定义成常量的形式
6、静态方式与单例方式
含有变量或者属性操作的使用单例模式。
没有变量或者属性操作就是用静态方法。
7、字符串转化到其他数据类型
比如转化为整数
iOS:使用起来比较直观,直接调用NSString的属性。 Obj.integerValue
C#:就不那么直观了,需要将string作为参数,跟C语言类似。
8、容器遍历
http://blog.csdn.net/xiaoyuemian/article/details/2958077
c#, 常用的有Array ArrayList或 List< T>,其中ArrayList会涉及类型安全性以及装箱、拆箱操作等,遍历方法foreach in。除了Array,其他都是可变的。
oc,常用的有NSArray,可变NSMutableArray;NSDictionary-NSMutableDictionary,他们都是类型不安全的,OC中没有类型安全容器,遍历方法 for in。
9、方法定义的区别
C#跟C、c++一脉相承
OC使用起来对参数的意义更明了。
10、属性定义
OC中比较简单,是要声明property属性即可,省去了比较繁琐的set和get方法。
相当于定义了以下的代码:
访问控制
readwrite 说明了属性是可读写的。
readonly
如果在自己被赋值时,需要做额外操作,则在setProperty里实现
C#中需要自己定义getter和setter。
这是老的定义方式,新的方式就简单了:
如果只需要get或者set,则只定义相应的即可
如果在自己被赋值时,需要做额外操作,则在set里实现
11、基类以及自身使用
c#: base,this
oc: super, self
12、格式化
C#: {0},{1}
oc: %@, %ld
13、缓存文件查看
iphone: iOS开发时,数据是写入App的独立存储空间的,它的查看分模拟器和真机两种情况
模拟器的话,可以像查看mac的磁盘文件一样,根据数据直接打开
真机的话,就需要借助一些工具,比如itools(查看沙盒文件的功能需要收费),iFunBox
WP: IsoStoreSpy
IsoStoreSpy 的官方网址 http://isostorespy.codeplex.com/
开发Windows Phone App ,有时会使用IsolatedStorageFile 写入APP 的独立空间,然而这个为APP所提供的独立存取空间,却不能像我们开数据夹一样的方便查看,可以借助IsoStoreSpy工具查看。
参考: http://www.it165.net/pro/html/201310/7575.html