objective-c 허름 한 학습-소스 노트
26543 단어 Objective-Cobj-cobjC
Fraction.h
#import <Foundation/NSObject.h>
@interface Fraction:NSObject {
int numerator;
int denominator;
}
-(Fraction*) initWithNumerator:(int) n denominator:(int) d;
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(void) setNumerator:(int)n andDenominator: (int)d;
//-(void) setNumerator:(int)n : (int)d;
-(int) numerator;
-(int) denominator;
@end
Fraction.m
#import "Fraction.h"
#import <stdio.h>
@implementation Fraction
-(Fraction*) initWithNumerator:(int) n denominator:(int) d{
self = [super init];
if(self){
[self setNumerator: n andDenominator: d];
}
}
-(void) print{
printf("%i/%i", numerator, denominator);
}
-(void) setNumerator: (int) n {
numerator = n;
}
-(void) setDenominator: (int) d {
denominator = d;
}
-(void) setNumerator:(int)n andDenominator: (int)d{
numerator = n;
denominator = d;
}
// -(void) setNumerator:(int)n: (int)d{
// numerator = n;
// denominator = d;
// }
-(int) denominator{
return denominator;
}
-(int) numerator{
return numerator;
}
@end
@interface Fraction(Private)
-(void) privateMethod;
@end
@implementation Fraction(Private)
-(void) privateMethod{
printf("-----privateMethdo
");
}
@end
#if 0
#import <stdio.h>
#import "Fraction.h"
int main(int argc, char **argv) {
Fraction *frac = [[Fraction alloc] init];
Fraction *frac2 = [[Fraction alloc] init];
Fraction *frac3 = [[Fraction alloc] initWithNumerator: 3 denominator: 10];
[frac setNumerator: 1];
[frac setDenominator: 3];
[frac2 setNumerator: 1 andDenominator: 5];
printf("The fraction is :");
[frac print];
printf ("
");
printf("The fraction2 is :");
[frac2 print];
printf ("
");
printf("The fraction3 is :");
[frac3 print];
printf ("
");
[frac release];
return 0;
}
#endif
////////////////////////////////////////////////////////////////////////
#if 0
#import <Foundation/NSObject.h>
@interface Access:NSObject{
@public
int publicVar;
@private
int privateVar;
int privateVar2;
@protected
int protectedVar;
}
@end
@implementation Access
@end
int main(){
Access *a = [[Access alloc] init];
a->publicVar = 5;
printf("public var: %i
", a->publicVar);
//a->protectedVar = 1;
[a release];
return 0;
}
#endif
///////////////////////////////////////////////////////////////////////
#if 0
#import <Foundation/NSObject.h>
//#import <Foundation/Foundation.h>
static int count;
@interface ClassA: NSObject
+(int) initCount;
+(void) initialize;
@end
@implementation ClassA
-(id) init{
printf("ClassA init
");
self = [super init];
count++;
return self;
}
+(int) initCount{
printf("ClassA initCount
");
return count;
}
+(void) initialize{
printf("ClassA initialize
");
count = 0;
}
@end
int main(){
ClassA *class1 = [[ClassA alloc] init];
ClassA *class2 = [[ClassA alloc] init];
printf("ClassA count=%i
", [ClassA initCount]);
ClassA *class3 = [[ClassA alloc] init];
printf("ClassA count = %i
", [ClassA initCount]);
// printf("class1 count = %i
", [class1 initCount]);
// printf("class2 count = %i
", [class2 initCount]);
// printf("class3 count = %i
", [class3 initCount]);
// NSLog(@"hello");
[class1 release];
[class2 release];
[class3 release];
return 0;
}
#endif
////////////////////////////////////////
//
#if 0
#import <Foundation/NSException.h>
#import <Foundation/NSObject.h>
#import <Foundation/NSAutoreleasePool.h>
@interface CupWarningException:NSException
@end
@implementation CupWarningException
@end
@interface CupOverflowException:NSException
@end
@implementation CupOverflowException
@end
@interface Cup: NSObject{
int level;
}
-(int) level;
-(void) setLevel: (int) l;
-(void) fill;
-(void) empty;
-(void) print;
@end
@implementation Cup
-(id) init{
self = [super init];
if(self){
[self setLevel: 0];
}
return self;
}
-(int) level{
return level;
}
-(void) setLevel:(int) l{
level = l;
NSLog(@"setLevel in : %d", l);
if(level > 100){
// throw overflow
NSException *e = [CupOverflowException
exceptionWithName: @"CupOverflowException"
reason: @"The level is > 100"
userInfo: nil
];
@throw e;
}else if(level >= 50){
NSException *e = [CupWarningException
exceptionWithName: @"CupWarningException"
reason: @"The level is >= 50"
userInfo: nil
];
@throw e;
}else if(level < 0){
NSException *e = [NSException
exceptionWithName: @"NSException"
reason: @"The level is < 0"
userInfo: nil
];
@throw e;
}
NSLog(@"setLevel out : %d", l);
}
-(void) fill{
[self setLevel: level + 10];
}
-(void) empty{
[self setLevel: level - 10];
}
-(void) print{
NSLog(@"Cup level is :%i
", level);
}
@end
#include <stdio.h>
int main(){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Cup *cup = [[Cup alloc] init];
int i;
for(i = 0; i < 4; i++){
[cup fill];
[cup print];
}
for(i = 0; i < 7; i++){
@try{
[cup fill];
}@catch(CupWarningException *e){
NSLog(@"e name:%s", [[e name] cString]);
}@catch(CupOverflowException *e){
NSLog(@"e name:%s", [[e name] cString]);
}@finally{ //
[cup print];
}
}
@try{
[cup setLevel: -1];
#if 1
}@catch (NSException *e){
NSLog(@"%s:%s
", [[e name] cString], [[e reason] cString]);
}
#else
}@catch (id e){ // id
NSLog(@"?????%s:%s
", [[e name] cString], [[e reason] cString]);
}
#endif
[cup release];
[pool release];
return 0;
}
#endif
/*
2012-06-21 02:02:06.691 main[7510] setLevel in : 0
2012-06-21 02:02:06.692 main[7510] setLevel out : 0
2012-06-21 02:02:06.692 main[7510] setLevel in : 10
2012-06-21 02:02:06.692 main[7510] setLevel out : 10
2012-06-21 02:02:06.692 main[7510] Cup level is :10
2012-06-21 02:02:06.692 main[7510] setLevel in : 20
2012-06-21 02:02:06.692 main[7510] setLevel out : 20
2012-06-21 02:02:06.692 main[7510] Cup level is :20
2012-06-21 02:02:06.692 main[7510] setLevel in : 30
2012-06-21 02:02:06.692 main[7510] setLevel out : 30
2012-06-21 02:02:06.692 main[7510] Cup level is :30
2012-06-21 02:02:06.692 main[7510] setLevel in : 40
2012-06-21 02:02:06.692 main[7510] setLevel out : 40
2012-06-21 02:02:06.692 main[7510] Cup level is :40
2012-06-21 02:02:06.692 main[7510] setLevel in : 50
2012-06-21 02:02:06.692 main[7510] e name:CupWarningException
2012-06-21 02:02:06.693 main[7510] Cup level is :50
2012-06-21 02:02:06.693 main[7510] setLevel in : 60
2012-06-21 02:02:06.693 main[7510] e name:CupWarningException
2012-06-21 02:02:06.693 main[7510] Cup level is :60
2012-06-21 02:02:06.693 main[7510] setLevel in : 70
2012-06-21 02:02:06.693 main[7510] e name:CupWarningException
2012-06-21 02:02:06.693 main[7510] Cup level is :70
2012-06-21 02:02:06.693 main[7510] setLevel in : 80
2012-06-21 02:02:06.693 main[7510] e name:CupWarningException
2012-06-21 02:02:06.693 main[7510] Cup level is :80
2012-06-21 02:02:06.693 main[7510] setLevel in : 90
2012-06-21 02:02:06.693 main[7510] e name:CupWarningException
2012-06-21 02:02:06.693 main[7510] Cup level is :90
2012-06-21 02:02:06.693 main[7510] setLevel in : 100
2012-06-21 02:02:06.693 main[7510] e name:CupWarningException
2012-06-21 02:02:06.693 main[7510] Cup level is :100
2012-06-21 02:02:06.693 main[7510] setLevel in : 110
2012-06-21 02:02:06.693 main[7510] e name:CupOverflowException
2012-06-21 02:02:06.693 main[7510] Cup level is :110
2012-06-21 02:02:06.693 main[7510] setLevel in : -1
2012-06-21 02:02:06.693 main[7510] NSException:The level is < 0
*/
////////////////////////////////////////////////////////////////////////////////////////////////
// (Inheritance)
#if 0
#import <Foundation/NSObject.h>
#import <Foundation/Foundation.h>
@interface Rectangle: NSObject{
int width;
int height;
}
#if 1
-(Rectangle*) initWithWidth: (int) w height: (int) h;
#else
-(id) initWithWidth: (int) w height: (int) h;
#endif
-(void) setWidth: (int) w;
-(void) setHeight: (int) h;
-(void) setWidth: (int) w height: (int) h;
-(int) widht;
-(int) height;
-(void) print;
@end
@implementation Rectangle
#if 1
-(Rectangle*) initWithWidth: (int) w height: (int) h{
#else
-(id) initWithWidth: (int) w height: (int) h{
#endif
self = [super init];
if(self){
[self setWidth:w height: h];
}
return self;
}
-(void) setWidth: (int) w{
width = w;
}
-(void) setHeight: (int) h{
height = h;
}
-(void) setWidth: (int) w height: (int) h{
width = w;
height = h;
}
-(int) widht{
return width;
}
-(int) height{
return height;
}
-(void) print{
NSLog(@"width = %i, height = %i", width, height);
}
@end
// Square
@interface Square: Rectangle
-(Square*) initWithSize: (int) s;
-(void) setSize: (int) s;
-(int) size;
@end
@implementation Square
-(Square*) initWithSize: (int) s{
self = [super init];
if(self){
[self setSize: s];
}
return self;
}
-(void) setSize: (int) s{
width = s;
height = s;
}
-(int) size{
return width;
}
-(void) setWidth: (int) w{
[self setSize: w];
}
-(void) setHeight: (int) h{
[self setSize: h];
}
@end
int main(){
Rectangle *rec = [[Rectangle alloc] initWithWidth: 10 height: 20];
#if 1
Square *sq = [[Square alloc] initWithSize: 15];
#else
// Rectangle initWithWidth Rectangle, , ???
//main.m:376:5: warning: initialization from distinct Objective-C type [enabled by default]
Square *sq = [[Square alloc] initWithWidth: 25 height: 25];
#endif
printf("Rectangle:");
[rec print];
printf("
");
printf("Square: ");
[sq print];
printf("
");
//update
[sq setWidth: 20];
printf("Square after change:");
[sq print];
printf("
");
NSLog(@"%@", [rec class]);// rec
//NSLog(@"%@", [sq isKindOfClass: [rec class]]);//
if([sq isMemberOfClass:[Square class]] == YES){
printf("sq is member of square class
");
}
if([sq isMemberOfClass: [Rectangle class]] == YES){
printf("sq is member of rectangel class
");
}
if([sq isMemberOfClass:[NSObject class]] == YES){
printf("sq is member of NSObject class
");
}
if([sq isKindOfClass:[Square class]] == YES){
printf("sq is kind of square class
");
}
if([sq isKindOfClass: [Rectangle class]] == YES){
printf("sq is kind of rectangel class
");
}
if([sq isKindOfClass:[NSObject class]] == YES){
printf("sq is kind of NSObject class
");
}
//respondsToSelector
//true
if([sq respondsToSelector: @selector(setSize:)] == YES){
printf("sq responds to setSize: method
");
}
//false
if([sq respondsToSelector: @selector(nonExistant)] == YES){
printf("sq responds to nonExistant method
");
}
//true
if([Square respondsToSelector: @selector(alloc)] == YES){
printf("square class responds to alloc method
");
}
//instancesRespondToSelector
//false
if([Rectangle instancesRespondToSelector: @selector(setSize:)] == YES){
printf("rectangle instance responds to setSize: method
");
}
//true
if([Square instancesRespondToSelector: @selector(setSize:)] == YES){
printf("square instance responds to setSize: method
");
}
[sq release];
[rec release];
return 0;
}
/* , NSLog printf ??????
2012-06-21 02:37:30.160 main[8451] width = 10, height = 20
Rectangle:
2012-06-21 02:37:30.161 main[8451] width = 15, height = 15
Square:
2012-06-21 02:37:30.161 main[8451] width = 20, height = 20
Square after change:
sq is member of square class
sq is kind of square class
sq is kind of rectangel class
sq is kind of NSObject class
sq responds to setSize: method
square class responds to alloc method
square instance responds to setSize: method
*/
#endif
/////////////////////////////////////////////////////////////////
// Categories
// : ,
// @implemention @interface :
// (Math)。
// class category, categories 。
#if 0
#import "Fraction.h"
@interface Fraction(Math)
-(Fraction*) add: (Fraction*) f;
-(Fraction*) mul: (Fraction*) f;
//-(Fraction*) div: (Fraction*) f;
//-(Fraction*) sub: (Fraction*) f;
@end
@implementation Fraction(Math)
-(Fraction*) add: (Fraction*) f{
return [[Fraction alloc] initWithNumerator:
numerator * [f denominator] + denominator * [f numerator]
denominator:
denominator * [f denominator]
];
}
-(Fraction*) mul: (Fraction*) f{
return [[Fraction alloc] initWithNumerator:
numerator * [f numerator]
denominator:
denominator * [f denominator]
];
}
@end
int main(){
Fraction *frac1 = [[Fraction alloc] initWithNumerator: 1 denominator: 3];
Fraction *frac2 = [[Fraction alloc] initWithNumerator: 2 denominator: 5];
Fraction *frac3 = [frac1 mul: frac2];
[frac1 print];
printf(" * ");
[frac2 print];
printf(" = ");
[frac3 print];
printf("
");
[frac1 privateMethod];
[frac2 privateMethod];
[frac3 privateMethod];
[frac1 release];
[frac2 release];
[frac3 release];
return 0;
}
/*
result
1/3 * 2/5 = 2/15
*/
#endif
//////////////////////////////////////////////////////////////////////////
// Posing
// categories, , class, (pose)
// super class
// : NSArray NSArrayChild, NSArrayChild NSArray,
// , NSArray NSArrayChild。
#if 0
#import "Fraction.h"
@interface FractionB: Fraction
-(void) print;
@end
@implementation FractionB
-(void) print{
printf("(%i/%i)", numerator, denominator);
}
@end
int main(){
Fraction *frac = [[Fraction alloc] initWithNumerator: 3 denominator: 10];
//print it
printf("The fraction is: ");
[frac print];
printf("
");
//./main: Uncaught exception NSInternalInconsistencyException,
// reason: Class posing is not supported
// GNUstep ,
[FractionB poseAsClass: [Fraction class]];
Fraction *frac2 = [[Fraction alloc] initWithNumerator: 3 denominator: 10];
//print it
printf("The fraction is: ");
[frac2 print];
printf("
");
//print it
printf("The fraction is: ");
[frac print];
printf("
");
[frac2 release];
[frac release];
return 0;
}
#endif
////////////////////////////////////////////////////////////////////////////////////
// Protocols
// c++ purely irtual class
#if 0
#import <Foundation/NSObject.h>
@interface Fraction: NSObject<Printing, NSCopying>{
int numerator;
int denominator;
}
@end
@implementation Fraction
@end
// id<Printing> var = frac;
#endif
////////////////////////////////////////////////////////////////////////////////////
//
// Retain release NSObject methods。
// retain call , release call 。
// [obj retainCount]
// retainCount 0, dealloc
#if 0
#import <Foundation/NSObject.h>
@interface FractionEx:NSObject {
int numerator;
int denominator;
}
@end
@implementation FractionEx
-(void) dealloc{
printf("Deallocing fraction
");
[super dealloc];
}
@end
int main(){
FractionEx *frac1 = [[FractionEx alloc ] init];
FractionEx *frac2 = [[FractionEx alloc ] init];
printf("FractionEx 1 retain count: %i
", [frac1 retainCount]);//1
printf("FractionEx 2 retain count: %i
", [frac2 retainCount]);//1
printf("frac1 retain
");
[frac1 retain];//2
printf("frac1 retain
");
[frac1 retain];//3
printf("frac2 retain
");
[frac2 retain];//2
printf("FractionEx 1 retain count: %i
", [frac1 retainCount]);
printf("FractionEx 2 retain count: %i
", [frac2 retainCount]);
printf("frac1 release
");
[frac1 release];//2
printf("FractionEx 1 retain count: %i
", [frac1 retainCount]);
printf("FractionEx 2 retain count: %i
", [frac2 retainCount]);
printf("frac2 release
");
[frac2 release];//1
printf("FractionEx 1 retain count: %i
", [frac1 retainCount]);
printf("FractionEx 2 retain count: %i
", [frac2 retainCount]);
printf("frac1 retain
");
[frac1 release];//1
printf("frac1 retain
");
[frac1 release];//0
printf("frac2 retain
");
[frac2 release];//0
return 0;
}
#endif
////////////////////////////////////////////////////////////////////////////////////
// Dealloc
// , dealloc 。
// objective-c nil,
#if 0
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
@interface AddressCard: NSObject{
NSString *first;
NSString *last;
NSString *email;
}
-(AddressCard*) initWithFirst:(NSString*) f
last: (NSString*) l
email: (NSString*) e;
-(NSString*) first;
-(NSString*) last;
-(NSString*) email;
-(void) setFirst:(NSString*) f;
-(void) setLast:(NSString*) l;
-(void) setEmail:(NSString*) e;
-(void) setFirst:(NSString*) f
last:(NSString*) l
email:(NSString*) e;
-(void) setFirst:(NSString*) f
last:(NSString*) l;
-(void) print;
@end
@implementation AddressCard
-(AddressCard*) initWithFirst:(NSString*) f
last: (NSString*) l
email: (NSString*) e{
self = [super init];
if(self){
[self setFirst:f last: l email: e];
}
}
-(NSString*) first{
return first;
}
-(NSString*) last{
return last;
}
-(NSString*) email{
return email;
}
-(void) setFirst:(NSString*) f{
[f retain];//
[first release];
first = f;
}
-(void) setLast:(NSString*) l{
[l retain];
[last release];
last = l;
}
-(void) setEmail:(NSString*) e{
[e retain];
[email release];
email = e;
}
-(void) setFirst:(NSString*) f
last:(NSString*) l
email:(NSString*) e{
[self setFirst: f];
[self setLast: l];
[self setEmail: e];
}
-(void) setFirst:(NSString*) f
last:(NSString*) l{
[self setFirst: f];
[self setLast: l];
}
-(void) print{
printf("%s %s <%s>", [first cString], [last cString], [email cString]);
printf("
class first retaincount:%i", [first retainCount]);
printf("
class last retaincount:%i", [last retainCount]);
printf("
class email retaincount:%i", [email retainCount]);
}
-(void) dealloc{
[first release];
[last release];
[email release];
[super dealloc];
}
@end
int main(){
NSString *first = [[NSString alloc] initWithCString: "Zhao"];
NSString *last = [[NSString alloc] initWithCString: "Kun"];
NSString *email = [[NSString alloc] initWithCString: "[email protected]"];
AddressCard *zhao = [[AddressCard alloc] initWithFirst: first
last: last
email: email
];
[first release];
[last release];
[email release];
printf("zhao first Retain count: %i
", [[zhao first] retainCount]);
printf("zhao last Retain count: %i
", [[zhao last] retainCount]);
printf("zhao email Retain count: %i
", [[zhao email] retainCount]);
[zhao print];
printf("
");
[zhao release];
return 0;
}
/*
zhao first Retain count: 1
zhao last Retain count: 1
zhao email Retain count: 1
2012-06-22 15:03:31.059 main[4257] autorelease called without pool for object (0x9195a10) of class GSAutoreleasedMemory in thread <NSThread: 0x91675d8>
2012-06-22 15:03:31.060 main[4257] autorelease called without pool for object (0x9196068) of class GSAutoreleasedMemory in thread <NSThread: 0x91675d8>
2012-06-22 15:03:31.060 main[4257] autorelease called without pool for object (0x9195848) of class GSAutoreleasedMemory in thread <NSThread: 0x91675d8>
Zhao Kun <[email protected]>
class first retaincount:1
class last retaincount:1
class email retaincount:1
*/
#endif
//////////////////////////////////////////////////////////////////////////////////
// Autorelease pool
// objective-c :
// 1.retain release
// 2.retain release/autorelease
// retain, release autorelease
#if 1
#import <Foundation/NSString.h>
#import <Foundation/NSAutoreleasePool.h>
#if 0
int main(){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"constant string";
NSString *str2 = [NSString stringWithString: @"string managed by the pool"];
NSString *str3 = [[NSString alloc] initWithString: @"self managed string"];
printf("%s retain count: %x
", [str1 cString], [str1 retainCount]);
printf("%s retain count: %x
", [str2 cString], [str2 retainCount]);
printf("%s retain count: %x
", [str3 cString], [str3 retainCount]);
[str3 release];
[pool release];
}
/*
constant string retain count: 343b
string managed by the pool retain count: 1
self managed string retain count: 1
:
1.str1 retainCount 343b
2. release str3, ,
autorelease pool 。
stringWithString , NSString class ,
autorelease pool 。
*/
#endif
#if 0
// retain , release autorelease, retainCount 1 ,
// 1 autorelease, 1-1=0, autorelease pool ,
// autorealease , [obj release];
#import "Fraction.h"
@interface Fraction(Ex)
+(Fraction*) fractionWithNumerator: (int) n
denominator: (int) d;
@end
@implementation Fraction(Ex)
+(Fraction*) fractionWithNumerator: (int) n
denominator: (int) d{
Fraction *ret = [[Fraction alloc] initWithNumerator: n denominator: d];
[ret autorelease];
return ret;
}
@end
int main(){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Fraction *frac1 = [Fraction fractionWithNumerator:2 denominator: 5];
Fraction *frac2 = [Fraction fractionWithNumerator: 1 denominator: 3];
printf("Fraction 1: ");
[frac1 print];
printf("
");
printf("Fraction 2: ");
[frac2 print];
printf("
");
//
//[frac1 release];
[pool release];
return 0;
}
#endif
#endif
//////////////////////////////////////////////////////////////////////////////////
// NSArray
// ,NSArray NSMutableArray,
// NSArray ,NSMutableArray
// NSEnumerator java ,
#if 0
#import <Foundation/NSArray.h>
#import <Foundation/NSString.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSEnumerator.h>
void print(NSArray *array){
NSEnumerator *enumerator = [array objectEnumerator];
id obj;
while(obj = [enumerator nextObject]){
printf("%s
", [[obj description] cString]);
}
}
int main(){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *arr = [[NSArray alloc] initWithObjects: @"Me", @"Myself", @"I", nil];
NSMutableArray *mutable = [[NSMutableArray alloc] init];
printf("----static array
");
print(arr);
// add stuff
[mutable addObject: @"One"];
[mutable addObject: @"Two"];
[mutable addObjectsFromArray: arr];
[mutable addObject: @"Three"];
printf("----mutable array
");
print(mutable);
//sort
printf("----sorted mutable array
");
[mutable sortUsingSelector: @selector(caseInsensitiveCompare:)];
print(mutable);
//free
[arr release];
[mutable release];
[pool release];
return 0;
}
/*
----static array
Me
Myself
I
----mutable array
One
Two
Me
Myself
I
Three
----sorted mutable array
I
Me
Myself
One
Three
Two
*/
#endif
//////////////////////////////////////////////////////////////////////////////////
// NSDictionary
#if 1
#import <Foundation/NSString.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSDictionary.h>
#import <Foundation/NSEnumerator.h>
#import <Foundation/Foundation.h>
void print(NSDictionary *map){
NSEnumerator *enumerator = [map keyEnumerator];
id key;
while((key = [enumerator nextObject]) != nil){
printf("%s => %s
", [[key description] cString]
, [[[map objectForKey: key] description] cString]);
}
}
int main(){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:
@"one", [NSNumber numberWithInt: 1],
@"two", [NSNumber numberWithInt: 2],
@"three", [NSNumber numberWithInt: 3],
nil];
NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];
printf("----static dictionary
");
print(dict);
//add object
[mutable setObject: @"Tom" forKey: @"[email protected]"];
[mutable setObject: @"Bob" forKey: @"[email protected]"];
printf("----mutable dictionary
");
print(mutable);
//free
[dict release];
[mutable release];
[pool release];
}
/*
----static dictionary
3 => three
1 => one
2 => two
----mutable dictionary
[email protected] => Bob
[email protected] => Tom
*/
#endif
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.