Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Cocoa ¿ò¼Ü For iOS(¶þ)¶ÔÏóµÄ·ÖÅä³õʼ»¯¡¢ÄÚÊ¡¡¢µ¥Àý
 
×÷Õߣºlikendsl À´Ô´£ºCSDN ·¢²¼ÓÚ 2015-01-30
  2076  次浏览      27
 

1¡¢Cocoa¶ÔÏóµÄ´´½¨

ÎÒÃǶ¼ÖªµÀ´´½¨Ò»¸ö¶ÔÏóÓÐÁ½²½£ºalloc ºÍ init£¨¶ÔÏó·ÖÅäºÍ³õʼ»¯£©£¬Á½²½È±Ò»²»¿É¡£³õʼ»¯Ò»°ã¶¼Êǽô½Ó×ŶÔÏó·ÖÅäµÄºóÃæ½øÐУ¬µ«ÊÇÕâÁ½¸ö²Ù×÷µÄ×÷ÓÃÊÇÍêÈ«²»Í¬µÄ¡£

·ÖÅä¶ÔÏ󣺾ÍÊÇCocoa´ÓÓ¦ÓóÌÐòµÄÐéÄâÄÚ´æÖÐΪ¶ÔÏó·ÖÅäÒ»¿éÄÚ´æ¡£Cocoa»á¸ù¾Ý¶ÔÏóµÄʵÀý±äÁ¿£¨ÀàÐͺͱäÁ¿µÄÅÅÁÐ˳Ðò£©¼ÆËãÄÚ´æ´óС²¢·ÖÅäÄڴ档ΪÁË·ÖÅäÄڴ棬ÄãÐèÒªÏòÀà¶ÔÏó£¨Àà¶ÔÏóÉÏÆªÏêϸ½²ÁËËüµÄÓÉÀ´ºÍ×÷Óã©·¢ËÍalloc »òÕßallocWithZone:·¢ËÍÏûÏ¢¡£ÏûÏ¢·µ»ØÒ»¸öδ³õʼ»¯µÄÀàʵÀý¡£ÄÇ·¢ËÍ·ÖÅäÏûÏ¢³ýÁË·ÖÅäÄÚ´æÍ⣬»¹×öÁËÆäËûµÄһЩºÜÖØÒªµÄ¹¤×÷£º

1.¶ÔÏóµÄ±£³Ö(retain)ÊýÉèÖÃΪ1.

2.·ÖÅäµÄ¶ÔÏóµÄisaÖ¸ÕëÖ¸ÏòÀà¶ÔÏó¡£

3.°Ñ¶ÔÏóËùÓеÄʵÀý±äÁ¿³õʼ»¯Îª0.Ò²¿ÉÒÔÀí½â³É0µÄµÈ¼ÛÀàÐÍ£ºnil NULL

ÕâÑùËùÓеĶÔÏó¶¼ÓÐÁËisaÖ¸Õ룬¶øÇÒÖ¸ÏòËüÃǶÔÓ¦µÄÀà¶ÔÏó£¬ÕâÑù¶ÔÏó¾Í¿ÉÒÔÕÒµ½ËüÔËÐÐʱµÄÐÅÏ¢¡£±ÈÈç¶ÔÏóÔڼ̳вã´Î»ú¹¹ÉÏËùÔÚµÄλÖã¨ÄĸöÊǸ¸À࣬ÄĸöÊÇ×ÓÀàµÈÐÅÏ¢£©£¬ËüʵÏÖµÄЭÒ飬»¹ÓÐÄÜÏìӦʲôÏûÏ¢¡£

¼´±ãÈç´Ë£¬allocÖ®ºóµÄ¶ÔÏó»¹²»ÊÇÒ»¸ö¿ÉÓõĶÔÏ󣬶ÔÏó±ØÐë³õʼ»¯¡£

1.1³õʼ»¯¶ÔÏó

³õʼ»¯¹ý³Ì¾ÍÊǰѶÔÏóµÄʵÀý±äÁ¿ÉèÖóÉÓÐЧºÏÀíµÄÖµ£¬»òÕß˵ÄãÏëÒªµÄÊý¾Ý¡£Èç¹ûÄãµÄÀàûÓÐʵÏÖ³õʼ»¯·½·¨£¬Ëü»áµ÷Óø¸ÀàµÄ¡£

³õʼ»¯·½·¨µÄÐÎʽ

³õʼ»¯·½·¨ÊÇʵÀý·½·¨£¬·µ»ØµÄÊÇidÀàÐ͵ĶÔÏó¡£³õʼ»¯·½·¨Êǽ²¾¿ÐÎʽµÄ£¬²»ÄÜÂÒд¡£·½·¨Äã¿ÉÒÔÓвÎÊý£¬¶à¸öÒ²ÐУ¬µ«ÊDZØÐëÊÇinit¿ªÍ·,±ÈÈ磺

- (id)initWithArray:(NSArray *)array;  (from NSSet)

²ÎÊýÐÎʽ£ºWithType:

³õʼ»¯µÄÎÊÌâ

³õʼ»¯Ò²ÓÐÎÊÌ⣿ɶÎÊÌ⣡£¿ÓÐʱºò³õʼ»¯·µ»ØµÄ²¢²»ÊÇÒ»¸öеĶÔÏó¡£Ê²Ã´Ê±ºòÄØ£¿ ±ÈÈ磺ÎÒÃÇÊìϤµÄµ¥ÀýģʽµÄʱºò¡£»¹Óб£³Ö¶ÔÏóij¸öÊôÐÔΨһµÄʱºò¡£ÕË»§ÀàµÄidΨһÐÔ£¬Èç¹û³õʼ»¯Ò»¸öidÊÇÒÑ´æÔÚµÄid,ÄǾÍÒª·µ»ØÒÑ´æÔÚid¶ÔÓ¦µÄÕË»§¶ÔÏó¡£

ÕâʱºòÎÒÃÇÐèÒª£º

1.ÊͷŸոշÖÅäµÄ¶ÔÏó£¨ÊDz»ÊǸоõºÜÀË·Ñ£¬¸Õ·ÖÅäÁËÓÖÒªÊÍ·Å£¬¶¼Ã»ÓÃÁËÄØ£¬Ã»°ì·¨µÄÊÂÇé°¡£©

2.·µ»ØÒÑ´æÔÚµÄÕË»§¶ÔÏó

ÓÐʱºòÄã³õʼ»¯¶ÔÏóʧ°ÜÁË£¬Ò²ÐèÒªÓÐһЩ²Ù×÷¡£Ôõô»áʧ°ÜÄØ£¿±ÈÈ磺initFromFile: Õâ¸ö³õʼ»¯·½·¨£¬ËüÊÇÒª´ÓÒ»¸öÎļþ³õʼ»¯£¬ÍòÒ»Õâ¸öÎļþ²»´æÔÚ£¬ÄǾÍÊdzõʼ»¯Ê§°Ü£¬³õʼ»¯Ê§°ÜÁËÔõô°ì£º

1.ÊͷŸոշÖÅäµÄ¶ÔÏó

2.·µ»Ønil

¶ÔÏó²»ÄÜÖØ¸´³õʼ»¯£¬²»È»»á²úÉúNSInvalidArgumentExceptionÒì³£¡£

ʵÏÖ³õʼ»¯·½·¨

×Ô¶¨ÒåÀà¿ÉÄܾÍÐèÒª×Ô¼ºÐ´³õʼ»¯µÄ·½·¨ ÁË£¬¿ÉÒÔÓÐÒ»¸ö»ò¶à¸ö³õʼ»¯·½·¨£¬¿´ÄãÉè¼ÆµÄÀàµÄÐèÒª¡£²»¹ýʵÏÖ³õʼ»¯·½·¨ÐèÒª×ñÑ­ÒÔϲ½Ö裺

1.ÏÈÒªµ÷Óø¸ÀàµÄ³õʼ»¯·½·¨

2.¼ì²é¸¸Àà³õʼ»¯·µ»ØµÄ¶ÔÏó£¬Èç¹ûÊÇnilÔò³õʼ»¯Ê§°Ü£¬Ò²·µ»Ønil

3.ÔÚ³õʼ»¯ÊµÀý±äÁ¿Ê±£¬Èç¹ûËüÃÇÊÇÆäËû¶ÔÏóµÄÒýÓ㬱ØÒªÊ±Òª½øÐÐretainºÍcopy

4.Èç¹û·µ»ØÒ»¸öÒÑ´æÔڵĶÔÏó£¬ÄÇÊ×ÏÈÊÍ·ÅзÖÅäµÄ¶ÔÏ󣨸ղÅÌáµ½µÄÕ˺ŵÄÀࣩ

5.Óöµ½ÎÊÌâ³õʼ»¯²»³É¹¦£¨±ÈÈç³õʼ»¯Îļþʧ°Ü£©£¬·µ»Ønil

6.Èç¹ûûÓÐÎÊÌ⣬·µ»Øself¡£³õʼ»¯Íê³É

ÏÂÃæÕâ¸öÀý×ÓÄÜ˵Ã÷Õ⼸¸ö²½Ö裬Çë¿´£º

- (id)initWithAccountID:(NSString *)identifier {  
if ( self = [super init] ) {
Account *ac = [accountDictionary objectForKey:identifier];
if (ac) { // object with that ID already exists
[self release];
return [ac retain];
}
if (identifier) {
accountID = [identifier copy]; // accountID is instance variable
[accountDictionary setObject:self forKey:identifier];
return self;
} else {
[self release];
return nil;
}
} else
return nil;
}

×¢Ò⣺×ÓÀà³õʼ»¯Ê±£¬±ØÐëÏȵ÷Óø¸ÀàµÄ³õʼ»¯·½·¨£¬ÒÔ±£Ö¤¼Ì³ÐÁ´Öи¸ÀàµÄʵÀý±äÁ¿µÃµ½ÕýÈ·µÄ¸³Öµ¡£

ÏÂͼ½âÊͼ̳ÐÁ´µÄ³õʼ»¯¹ý³Ì£º

1.2 dealloc·½·¨

deallocºÍinit·½·¨ÊÇÏàºôÓ¦µÄ¡£deallocÈ·±£µÄÊǶÔÏóµÄʵÀý±äÁ¿ºÍ¶¯Ì¬·ÖÅäµÄÄÚ´æ±»ÕýÈ·µÄÊÍ·Å¡£ºÍinit·½·¨Ïà·´£¬¸¸ÀàµÄdeallocÊÇÔÚÊÍ·ÅÁËÆäËûµÄÖ®ºó×îºóµ÷Óõġ£

- (void)dealloc {  
[accountDictionary release];
if ( mallocdChunk != NULL )
free(mallocdChunk);
[super dealloc];
}

1.3 ¹¤³§Àà·½·¨

¹¤³§Àà·½·¨°Ñ·ÖÅä¶ÔÏóºÍ³õʼ»¯ºÏ¶þΪһ£¬·µ»Ø´´½¨¶ÔÏ󣬶øÇÒ»¹×Ô¶¯ÊÍ·Å¡£ÕâЩ·½·¨µÄÐÎʽһ°ãÊÇ£º+ (type)className...

NSDate¹¤³§Àà·½·¨£º

+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;  
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;

²âÊÔϵÚÒ»¸ö´úÂ룺

NSDate *now = [NSDate dateWithTimeIntervalSinceNow: 0];  
NSLog(@"now:%@",now);

´òÓ¡³öÀ´now:2012-10-23 06:39:25 +0000

Òýµ±Ç°Ê±¼äΪ»ù×¼£¬0Êǵ±Ç°Ê±¼ä£¬+0000±íʾÊÇÊ±Çø£¬ÔÛÃÇÊÇ8Ê±Çø£¬+8ÊÇ14:39¡£Èç¹û²ÎÊýÊÇ24*60*60ÊÇÃ÷ÌìµÄʱ¼ä£¬Èç¹ûÊǸºÊýÄǾÍÊÇ×òÌìµÄʱ¼ä¡£

NSDataÌṩÏÂÃæµÄ¹¤³§·½·¨£º

+ (id)dataWithBytes:(const void *)bytes length:(unsigned)length;  
+ (id)dataWithBytesNoCopy:(void *)bytes length:(unsigned)length;
+ (id)dataWithBytesNoCopy:(void *)bytes length:(unsigned)length
freeWhenDone:(BOOL)b;
+ (id)dataWithContentsOfFile:(NSString *)path;
+ (id)dataWithContentsOfURL:(NSURL *)url;
+ (id)dataWithContentsOfMappedFile:(NSString *)path;

¾Ù¸ö + (id)

dataWithContentsOfURLµÄÀý×Ó£¬ÏÂÔØÍ¼Æ¬£¬ºÁÎÞѹÁ¦¡£

NSURL * url = [NSURL URLWithString:@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"];  
NSData * data = [NSData dataWithContentsOfURL:url];
UIImage *image = [[UIImage alloc]initWithData:data];

2¡¢ÔËÐÐʱÄÚÊ¡µÄÄÜÁ¦

ÄÚÊ¡£¨Introspection£©ÊÇÃæÏò¶ÔÏóÓïÑԺͻ·¾³µÄÖØÒªÌØÐÔ£¬Objective-CºÍCocoaÔÚÕâ·½Ãæ×öµÄºÜºÃ¡£ÄÚÊ¡ÊǶÔÏó×Ô¼º¼ì²é×Ô¼º×öΪÔËÐÐʱ¶ÔÏóÏêϸÐÅÏ¢µÄÒ»ÖÖÄÜÁ¦¡£ÕâЩÏêϸÐÅÏ¢°üÀ¨¶ÔÏóÔڼ̳ÐÊ÷ÉϵÄλÖ㬶ÔÏóÊÇ·ñ×ñÑ­ÌØ¶¨µÄЭÒ飬ÒÔ¼°ÊÇ·ñ¿ÉÒÔÏìÓ¦ÌØ¶¨µÄÏûÏ¢¡£NSObjectЭÒéºÍÀඨÒåÁ˺ܶàÄÚÊ¡·½·¨£¬ÓÃÓÚ²éѯÔËÐÐʱÐÅÏ¢£¬ÒÔ±ã¸ù¾Ý¶ÔÏóµÄÌØÕ÷½øÐÐʶ±ð¡£

Áé»îµÄʹÓÃÄÚÊ¡ÄÜÁ¦¿ÉÒÔÈÃÄãµÄ³ÌÐò¸üÎȶ¨Ç¿´ó¡£ÄÚÊ¡¿ÉÒÔ±ÜÃâ´íÎ󵨽øÐÐÏûÏ¢ÅÉ·¢¡¢¶ÔÏóÏàµÈµÄ´íÎóÅжϵÈÎÊÌâ¡£ÏÂÃæ½éÉÜÄÚÊ¡µÄһЩʵÓ÷½·¨£º

2.1 ¶¨Î»¼Ì³Ð¹ØÏµ

NSObjectЭÒéÉùÃ÷Á˼¸¸ö·½·¨£¬ÓÃÓÚÈ·¶¨¶ÔÏóÔÚÀà²ã´ÎÖеÄλÖá£class·µ»ØÀàµÄClass¶ÔÏó¡£superclass·µ»Ø¸¸ÀàµÄClass¶ÔÏ󡣿´ÏÂÃæÀý×Ó£º

while ( id anObject = [objectEnumerator nextObject] ) {  
if ( [self class] == [anObject superclass] ) {
// do something appropriate...
}
}

·µ»ØµÄÁ½¸öClass¶ÔÏó¿´ÊÇ·ñÏàµÈ¡£

¼ì²éÀà¶ÔÏóµÄ´ÓÊô¹ØÏµ£ºisKindOfClass:ÅжÏÊÇ·ñÊÇÕâ¸öÀàµÄ»òÕâ¸öÀàµÄ×ÓÀàµÄʵÀý¡£isMemberOfClass: Õâ¸ö¸üÑϸñЩ£¬ÅжÏÊÇ·ñÊÇÕâ¸öÀàµÄʵÀý¡£Àý×Ó£º

if ([item isKindOfClass:[NSData class]]) {  
const unsigned char *bytes = [item bytes];
unsigned int length = [item length];
// ...
}

2.2 ÅжϷ½·¨µÄʵÏÖ»òÕßÊÇ·ñ×ñѭij¸öЭÒé

NSObject»¹ÓÐÁ½¸ö¹¦Äܸü¼ÓÇ¿´óµÄÄÚÊ¡·½·¨£¬¼´respondsToSelector:ºÍconformsToProtocol:¡£Á½¸öÊÇʵÀý·½·¨¡£respondsToSelectorÅжÁ¶ÔÏóÊÇ·ñʵÏÖij¸öµÄ·½·¨£¬conformsToProtocolÅжÏÊÇ·ñ×ñÑ­Ö¸¶¨µÄÕýʽЭÒ飨ÕýÊÇЭÒéµÄÒâ˼ÊÇʵÏÖ¸ÃЭÒéµÄËùÓз½·¨£©¡£ËùÓм̳ÐNSObjectµÄÀà¶¼ÓÐÓÐÕâÁ½¸ö·½·¨¡£

respondsToSelectorÀý×Ó£º

- (void)doCommandBySelector:(SEL)aSelector {  
if ([self respondsToSelector:aSelector]) {
[self performSelector:aSelector withObject:nil];
} else {
[_client doCommandBySelector:aSelector];
}
}

2.3 ¶ÔÏóµÄ±È½Ï

hashºÍisEqual:·½·¨¶¼ÔÚNSObjectЭÒéÖÐÉùÃ÷£¬Çұ˴˹ØÏµ½ôÃÜ¡£ÊµÏÖhash·½·¨»á·µ»ØÒ»¸öÕûÐÍÊý¡£Á½¸ö¶ÔÏóÏàµÈÒâζ×ÅËüÃÇÓÐÏàͬµÄ¹þÏ£Öµ¡£Èç¹ûÄúµÄ¶ÔÏó¿ÉÄܱ»°üº¬ÔÚÏóNSSetÕâÑùµÄ¼¯ºÏÖУ¬ÔòÐèÒª¶¨Òåhash·½·¨£¬²¢È·±£¸Ã·½·¨ÔÚÁ½¸ö¶ÔÏóÏàµÈµÄʱºò·µ»ØÏàͬµÄ¹þÏ£Öµ¡£²»¹ýNSObjectÀàÖÐȱʡµÄisEqualʵÏÖÖ»ÊǼòµ¥µØ¼ì²éÖ¸ÕëÊÇ·ñÏàµÈ¡£

isEqual·½·¨Àý×Ó£º

- (void)saveDefaults {  
NSDictionary *prefs = [self preferences];
if (![origValues isEqual:prefs])
[Preferences savePreferencesToDefaults:prefs];
}

Èç¹û×ÓÀàÔö¼ÓÁËʵÀý±äÁ¿£¬±È½Ï×ÓÀàÐèÒª¶Ô×ÓÀàµÄʵÀý±äÁ¿Ò²×ö±È½Ï²ÅÄÜÈ·¶¨¶ÔÏóÊÇ·ñÏàµÈʱ£¬ÐèÒªÖØÔØisEqual·½·¨£º

- (BOOL)isEqual:(id)other {  
if (other == self)
return YES;
if (!other || ![other isKindOfClass:[self class]])
return NO;
return [self isEqualToWidget:other];
}

- (BOOL)isEqualToWidget:(MyWidget *)aWidget {
if (self == aWidget)
return YES;
if (![(id)[self name] isEqual:[aWidget name]])
return NO;
if (![[self data] isEqualToData:[aWidget data]])
return NO;
return YES;
}

3¡¢¶ÔÏó¿É±äÐÔ(mutable)

3.1 ΪʲôҪÓпɱäÓë²»¿É±ä¶ÔÏó

´´½¨¶ÔÏóµÄʱºò£¬Ñ¡¿É±äµÄ¶ÔÏó»¹ÊÇÑ¡²»¿É±äµÄ¶ÔÏóÄØ£¿Ôõô¾ö¶¨ÄØ¡£ÏÈ¿´¿´ÎªÊ²Ã´ÒªÓпɱäÓë²»¿É±äÕâÁ½ÖÖ¶ÔÏóµÄ´æÔÚ¡£

¿É±äµÄ¶ÔÏóµÄÀàÇ°Ãæ¶¼ÓÐ MutableµÄ¹Ø¼ü×Ö£¬ÕâЩÀàÓУº

NSMutableArray

NSMutableDictionary

NSMutableSet

NSMutableIndexSet

NSMutableCharacterSet

NSMutableData

NSMutableString

NSMutableAttributedString

NSMutableURLRequest

ËüÃǶ¼ÊǶÔÓ¦µÄ²»¿É±äÀàµÄ×ÓÀà¡£

Èç¹û¶ÔÏó¶¼ÊǿɱäµÄ£¬ÄÇÔÚijЩ³¡¾°ÖÐÊǺܲ»°²È«ºÍ²»¿É¿¿µÄ¡£±ÈÈçÄãµÄij¸ö¶ÔÏóµ±×ö²ÎÊý´«¸øÁËij¸ö·½·¨£¬Ä㲻ϣÍûÄãµÄ¶ÔÏ󱻸ı䡣ÕâʱÕâ¸ö·½·¨È´ÄãµÄ±äÁ¿¸Ä±äÁË£¬ÕâÊÇÄã²»ÏëÒªµÄ½á¹û¡£¶øÔÚÁíÍâһЩ³¡¾°È´Ïà·´¡£OK£¬ÎªÁ˶ÔÓ¦²»Í¬µÄ³¡¾°£¬¶ÔÏó¾Í±ØÐëÓпɱäÓë²»¿É±äÖ®·ÖÁË¡£

3.2 ʲôʱºòÓÿɱä¶ÔÏó

µ±ÐèÒªÔÚ¶ÔÏó´´½¨Ö®ºóƵ·±»ò²»¶ÏµØ¶ÔÆäÄÚÈݽøÐÐÐÞ¸Äʱ£¬ÇëʹÓÿɱä¶ÔÏó

ÓÐЩʱºò£¬ÓÃÒ»¸ö²»¿É±ä¶ÔÏóÈ¡´úÁíÒ»¸ö¿ÉÄܸüºÃ¡£±ÈÈ磬´ó¶àÊý±£Áô×Ö·û´®µÄʵÀý±äÁ¿¶¼Ó¦¸Ã±»¸³ÖµÎªÒ»¸ö²»¿É±äµÄNSString¶ÔÏ󣬶øÕâЩ¶ÔÏóÔòÓá°setter¡±·½·¨À´½øÐÐÌæ»»¡£

ÒÀ¿¿·µ»ØÀàÐÍÀ´½øÐпɱäÐÔÌáʾ¡£

Èç¹ûÄã²»ÄÜÈ·¶¨Ò»¸ö¶ÔÏóÊǿɱäµÄ£¬Ôò½«Ëüµ±³É²»¿É±äµÄ´¦Àí¡£

4¡¢´´½¨µ¥Àý

´´½¨µ¥ÀýµÄ²½Ö裺

1.ÉùÃ÷Ò»¸öµ¥Àý¶ÔÏóµÄ¾²Ì¬ÊµÀý£¬²¢³õʼ»¯Îªnil¡£

2.ÔÚ¸ÃÀàµÄÀ๤³§·½·¨£¨Ãû³ÆÀàËÆÓÚ¡°sharedInstance¡±»ò¡°sharedManager¡±£©ÖÐÉú³É¸ÃÀàµÄÒ»¸öʵÀý£¬µ«½öµ±¾²Ì¬ÊµÀýΪnilµÄʱºò¡£

3.ÖØÔØallocWithZone:·½·¨£¬È·±£µ±Óû§ÊÔͼֱ½Ó£¨¶ø²»ÊÇͨ¹ýÀ๤³§·½·¨£©·ÖÅä»ò³õʼ»¯ÀàµÄʵÀýʱ£¬²»»á·ÖÅä³öÁíÒ»¸ö¶ÔÏó¡£

ʵÏÖ»ù±¾Ð­Òé·½·¨£ºcopyWithZone:¡¢release¡¢retain¡¢retainCount¡¢ºÍautorelease £¬ÒÔ±£Ö¤µ¥ÀýµÄ״̬¡£

ʵÏÖµ¥ÀýµÄ´úÂëÀý×Ó£º

static MyGizmoClass *sharedGizmoManager = nil;  

+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}

+ (id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
sharedGizmoManager = [super allocWithZone:zone];
return sharedGizmoManager; // assignment and return on first allocation
}
}
return nil; //on subsequent allocation attempts return nil
}

- (id)copyWithZone:(NSZone *)zone
{
return self;
}

- (id)retain
{
return self;
}

- (unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}

- (void)release
{
//do nothing
}

- (id)autorelease
{
return self;
}
   
2076 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ