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来保证线程安全是很天真的。要写出线程安全的代码,还需要有同步和互斥机制。 }}}}