Note

引用计数 [myFraction retain]; 引用次数加1。

[myFraction release]; 引用次数减1。

+ (id)arrayWithObject:(id)anObject;
+ (id)arrayWithObjects:(id)firstObject, ...;
- (id)initWithObjects:(id)firstObject, ...;

NSUInteger numberOfItems = [someArray count];
if ([someArray containsObject:someString]) {
}

NSArray *unsortedStrings = @[@"gammaString", @"alphaString", @"betaString"];
NSArray *sortedStrings =
[unsortedStrings sortedArrayUsingSelector:@selector(compare:)];

id string = immutableArray[0];
if ([string isKindOfClass:[NSMutableString class]]) {
[string appendString:@" World!"];
}

NSMutableArray *mutableArray = [NSMutableArray array];
[mutableArray addObject:@"gamma"];
[mutableArray addObject:@"alpha"];
[mutableArray addObject:@"beta"];
[mutableArray replaceObjectAtIndex:0 withObject:@"epsilon"];

[mutableArray sortUsingSelector:@selector(caseInsensitiveCompare:)];

NSNumber *storedNumber = [dictionary objectForKey:@"magicNumber"];
NSNumber *storedNumber = dictionary[@"magicNumber"];

[dictionary setObject:@"another string" forKey:@"secondString"];
[dictionary removeObjectForKey:@"anObject"];

NSArray *array = @[ @"string", @42, [NSNull null] ];
for (id object in array) {
	if (object == [NSNull null]) {
		NSLog(@"Found a null object");
	}
}


http://wenku.baidu.com/view/e7a6b3ff910ef12d2af9e723.html
iPhone用户界面指导原则

http://wenku.baidu.com/view/b16efdc2d5bbfd0a795673ac.html
苹果iPhone用户界面设计经验分享


object-c 2.0新特性 @optional 和@required
@optional表示可以不选择实现方法。
@required表示一定要实现的方法。
同时采用两个协议 @interface Car :NSObject <NSCopying,NSCoding>。

Engine采用的时候要实现NSCopying的方法copyWithZone
@interface Engine :NSObject<NSCopying>
@end
@implementation Engine
-(id) copyWithZone:(NSZone *)zone
{
    Engine *engineCopy;
    engineCopy= [[[selfclass] allocWithZone:zone]init];
    return engineCopy;
}
@end

@copy属性有一点要主要,被定义有copy属性的对象必须要符合NSCopying协议,并且你还必须实现了
-(id)copyWithZone:(NSZone*)zone该方法。

var = [obj foo] 等价于 var = obj.foo;
[obj setFoo:var] 等价于 obj.foo = var;

按下option键,光标移到UIApplicatonDelegation上变十字线,双击将打开文档


property不但可以在interface,在协议protocol .和类别category中也可以使用.
synthesize的理解是:实现property所声明的方法的定义。

assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题

#define second 24*60*60
预处理器将为你计算常数表达式的值,代码清晰而没有代价的。

NSDate简单使用说明
http://my.oschina.net/joanfen/blog/153173


+ (NSString *)GetUUID
{
  CFUUIDRef theUUID = CFUUIDCreate(NULL);
  CFStringRef string = CFUUIDCreateString(NULL, theUUID);
  CFRelease(theUUID);
  return (__bridge NSString *)string;
}


对iPhone平台来说,iPhone官方只支持静态库联编

不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测;


objective c中有各种运行时,其一是每个类都有+ (void)initialize,其实你只知道-(id)init的吧,这个方法每个类只调用一次

load是类所在文件被引用(import)就会被调用,而initialize是在类或者其子类的第一个方法被调用前调用。



@property编译之后为你生成相应的getter和setter方法。而且,注意看到面property(nonatomic,copy)括号里面这copy参数了吗?它所做的事就是

_name = [name copy];
  如果你指定retain,或者assign,那么相应的代码分别是:

//property(retain)NSString* name;
_name = [name retain];

//property(assign)NSString* name;
_name = name;

推荐做法是NSString用copy,delegate用assign(且一定要用assign,不要问为什么,只管去用就是了,以后你会明白的),
非objc数据类型,比如int,float等基本数据类型用assign(默认就是assign),而其它objc类型,比如NSArray,NSDate用retain。

如果你用@synthesize去让编译器生成代码,那么atomic和nonatomic生成的代码是不一样的。
如果使用atomic,如其名,它会保证每次getter和setter的操作都会正确的执行完毕,
而不用担心其它线程在你get的时候set,可以说保证了某种程度上的线程安全。
但是,我上网查了资料,仅仅靠atomic来保证线程安全是很天真的。要写出线程安全的代码,还需要有同步和互斥机制。

}}}}