OC 일반적인 방법
OC
클래스 객체
<1>한 클래스가 다른 클래스의 하위 클래스인지 여부
- (BOOL)isSubClassofClass: [xxx class];
<2> 인용이 가리키는 대상이 어떤 유형이나 하위 유형인지 여부
- (BOOL)isKindOfClass:[xxx class];
<3> 인용(실례)이 가리키는 대상이 어떤 유형인지 여부
- (BOOL)isMemberOfClass:[xxx class];
메소드 선택기
<1> 어떤 종류에 어떤 방법이 존재하는지 여부
- (BOOL)instancesRespondToSelector:@selector( );
<2> 메시지 강제 전송
- (id)performSelector:@selector( );
<3> 사용 가능한 방법
- (BOOL)respondsToSelector:(SEL)aSelector;
프로토콜 선택기
<1> 특정 클래스가 특정 프로토콜을 준수했는지 여부
- (BOOL) conformsToProtocol:@protocol( );
NSRange
NSRange는 구조체로 location은 0으로 시작하는 index이며 length는 객체의 길이를 나타냅니다.모두 NSUInteger 유형입니다.typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
<1> 문자열에 다른 문자열이 포함되어 있는지 여부
- (NSRange)rangeOfString:(NSString *)searchString;
NSRange struct
NSString 불변 문자열
<1> 만들기
NSString *str = @” ”;
<2> 포맷 생성
+ (instancetype)stringWithFormat:@“%@,%@”,@“ a”,@“ b”
<3> 처음부터 어느 위치로 분할
- (NSString *)substringToIndex:
<4> 중간에서 끝으로 분할
- (NSString *)substringFromIndex:
<5> 중간에서 길이 x 분할
- (NSString *)substringWithRange:NSMakeRange( , )
<6> 끝부분 추가
- (NSString *)stringByAppendingString:@” ”
<7> 지정된 형식으로 추가
- (NSString *)stringByAppendingFormat:@”%@ %@”,@” a”,@” b”`
<8> 위치 교체 지정
- (NSString *)stringByReplacingCharactersInRange:NSMakeRange( , ) withString:@” ”
<9> 파일에서 읽은 데이터의 인코딩 변환
NSString *path = @”/Users/apple/Desktop/test.txt”;
+ (nullable instancetype)stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil
<10> 문자열 비교(내용이 동일한지 여부)
- (BOOL)isEqualToString:@” ”`
<11> 대문자 문자열로 변환
(NSString *)uppercaseString
<12> 문자열 비교(크기 비교)
- (NSComparisonResult)compare:(NSString *)string;
만약 a가 b보다 크면 1로 돌아가고, 똑같이 0으로 돌아가고, 작게는 -1로 돌아간다.
<13> 생성된 문자열의 내용이 어떤 문자로 시작되는지 판단
- (BOOL)hasPrefix:(NSString *)str;
<14> 생성된 문자열의 내용이 어떤 문자로 끝날지 판단
- (BOOL)hasSuffix:(NSString *)str;
<15> 문자열을 지정한 문자열 (또는 @ "등) 을 통해 분할하여 그룹을 생성합니다
- (NSArray *)componentsSeparatedByString:(NSString *)separator;
<16> 주소에서 파일 이름 및 접미어 가져오기
NSString * fileName = [path lastPathComponent];
NSMutableString 가변 문자열
<1> 만들기
NSMutableString *str = [[NSMutableString alloc]init];`
<2> 지정된 위치에 컨텐츠 추가
- (void)insertString:@” ” atIndex: `
<3> 마지막에 내용 추가
- (void)appendString:@” ”`
<4> 마지막에 지정된 형식 내용 추가
- (void)appendFormat:@“%@,%@”,@“ a”,@“ b”`
<5> 삭제
- (void)deleteCharactersInRange:NSMakeRange( , )`
<6> 교체
- (void)replaceCharactersInRange:NSMakeRange( , ) withString:@” ”`
NSNumber 기본 데이터 유형 클래스 캡슐화
<1>int형
+(NSNumber *)numberWithInt:int `
(int)intValue`
<2>char형
+(NSNumber *)numberWithChar:’ ’`
(char)charValue`
<3>float형
+(NSNumber *)numberWithFloat:float `
(float)floatValue`
<4>더블형
+(NSNumber *)numberWithDouble:double
(double)doubleValue
<5>BOOL형
+(NSNumber *)numberWithBool:YES/NO
(BOOL)doubleValue
NSValue 패브릭 클래스 패키지
<1> 패키지
TRPoint p = {3,4};
valueWithBytes:&p objCType:@encode(TRPoint)
<2> 개봉
- (void)getValue:&p2
NSDate 시간
<1> 현재 시간 획득
NSDate *date = [[NSDate alloc]init];
<2>x초 지연 시간 획득
+ (instancetype)dateWithTimeIntervalSinceNow:30.0f
<3> 두 시간차 획득
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
<4> 지정된 형식의 시간을 받아 시스템 시간대로 자동 변환
NSDateFormatter *df = [[NSDateFormatter alloc]init];
df.dateFormat = @”yyyy-MM-dd hh:mm:ss”
(NSString *)df stringFromDate:[[NSDate alloc]init]
NSTimeZone * zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSData * localeTime = [date dateByAddingTimeInterval:interval];
NSArray 불변 배열
<1> 만들기
NSArray *array = @[@“ a”,(ObjectType)str,@“ b”];
<2> 배열 길이 획득
.count
<3> 그룹 아래 표시를 통해 원소 획득
- (ObjectType)objectAtIndex:(NSUInteger) ;
<4> 그룹 마지막 요소 획득
.lastObject
<5> 그룹 첫 번째 원소 획득
.firstObject
<6> 어떤 대상이 그룹의 하단에 있는 것을 가져옵니다. 만약 그룹에 이 대상이 존재하지 않는다면 쓰레기 값의 하단을 되돌려줍니다
- (NSUInteger)indexOfObject:@” ”
<7>OC 중수 그룹을 두루 훑어보는 세 가지 방식
a for 순환for (int i = 0; i < [stus count]; i++) {
Students *stu = [stus objectAtIndex:i];
NSLog(@”%@”, stu);
}
b for 빠른 열거// 1 2
for (Students *stu2 in stus) {
NSLog(@”%@”, stu2);
}
c 교체기 반복
//
// , nil;
NSEnumerator *enumerator = [stus objectEnumerator];
//
//
Students *st3 = nil;
while (st3 = [enumerator nextObject]) {
NSLog(@”%@”, st3);
}
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
NSArray * array = @[@"a",@"b",@"c"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
}];
<7> 사용자 정의 클래스를 저장하는 그룹을 출력합니다. description 방법을 다시 쓰고 출력 형식을 사용자 정의해야 합니다.
-(NSString *)description{
return [NSString stringWithFormat:@”name:%@ age:%d”, self.name, self.age];
}
NSLog(@”name:%@ age:%i”,stu.name, stu.age);
<8> 배열의 복사
(NSArray *)[[NSArray alloc]initWithArray: copyItems:YES]
(NSArray *)[[NSArray alloc]initWithArray: copyItems:NO]
Order 배열 정렬
<1> 정렬 규칙
SEL sel = @selector(compare:);
<2> 둘 비교
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
<3> 그룹이 기본 데이터 형식이 아닌 경우 compare 방법을 다시 써야 합니다
-(NSComparisonResult) compare:(Students *) otherStudent{
// if((self.age - otherStudent.age) >0)c
// return NSOrderedDescending;
// else if ((self.age - otherStudent.age) <0)
// return NSOrderedAscending;
// else
// return NSOrderedSame;
// int compare
NSNumber *n1 = [NSNumber numberWithInt:self.age];
NSNumber *n2 = [NSNumber numberWithInt:otherStudent.age]; return [n1 compare:n2];
// —
// return [self.name compare:otherStudent.name];
}
NSMutable Array 가변 배열
<1> 일반 창설
NSMutableArray *mArray =[[NSMutableArray alloc]init];
<2> 사전 정의된 스페이스 생성
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
<3> 생성 초기화
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
<4> 변수 그룹을 변수 그룹으로 전환
- (id)mutableCopy
<5> 요소를 끝에 추가
- (void)addObject:@” ”
<6> 지정된 위치에 요소 추가
- (void)insertObject:@” ” atIndex:
<7> 삭제 끝
- (void)removeLastObject
<8> 지정된 객체 삭제
- (void)removeObject:@” ”
<9> 지정된 위치 요소 삭제
- (void)removeObjectAtIndex:
<10> 모든 요소 삭제
- (void)removeAllObjects;
<11> 요소 수정
- (void)replaceObjectAtIndex: withObject:@” ”
NSSet 변경 불가 무질서 컬렉션 반복 불가(아래 첨자 없음)
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
<1>한 클래스가 다른 클래스의 하위 클래스인지 여부
- (BOOL)isSubClassofClass: [xxx class];
<2> 인용이 가리키는 대상이 어떤 유형이나 하위 유형인지 여부
- (BOOL)isKindOfClass:[xxx class];
<3> 인용(실례)이 가리키는 대상이 어떤 유형인지 여부
- (BOOL)isMemberOfClass:[xxx class];
메소드 선택기
<1> 어떤 종류에 어떤 방법이 존재하는지 여부
- (BOOL)instancesRespondToSelector:@selector( );
<2> 메시지 강제 전송
- (id)performSelector:@selector( );
<3> 사용 가능한 방법
- (BOOL)respondsToSelector:(SEL)aSelector;
프로토콜 선택기
<1> 특정 클래스가 특정 프로토콜을 준수했는지 여부
- (BOOL) conformsToProtocol:@protocol( );
NSRange
NSRange는 구조체로 location은 0으로 시작하는 index이며 length는 객체의 길이를 나타냅니다.모두 NSUInteger 유형입니다.typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
<1> 문자열에 다른 문자열이 포함되어 있는지 여부
- (NSRange)rangeOfString:(NSString *)searchString;
NSRange struct
NSString 불변 문자열
<1> 만들기
NSString *str = @” ”;
<2> 포맷 생성
+ (instancetype)stringWithFormat:@“%@,%@”,@“ a”,@“ b”
<3> 처음부터 어느 위치로 분할
- (NSString *)substringToIndex:
<4> 중간에서 끝으로 분할
- (NSString *)substringFromIndex:
<5> 중간에서 길이 x 분할
- (NSString *)substringWithRange:NSMakeRange( , )
<6> 끝부분 추가
- (NSString *)stringByAppendingString:@” ”
<7> 지정된 형식으로 추가
- (NSString *)stringByAppendingFormat:@”%@ %@”,@” a”,@” b”`
<8> 위치 교체 지정
- (NSString *)stringByReplacingCharactersInRange:NSMakeRange( , ) withString:@” ”
<9> 파일에서 읽은 데이터의 인코딩 변환
NSString *path = @”/Users/apple/Desktop/test.txt”;
+ (nullable instancetype)stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil
<10> 문자열 비교(내용이 동일한지 여부)
- (BOOL)isEqualToString:@” ”`
<11> 대문자 문자열로 변환
(NSString *)uppercaseString
<12> 문자열 비교(크기 비교)
- (NSComparisonResult)compare:(NSString *)string;
만약 a가 b보다 크면 1로 돌아가고, 똑같이 0으로 돌아가고, 작게는 -1로 돌아간다.
<13> 생성된 문자열의 내용이 어떤 문자로 시작되는지 판단
- (BOOL)hasPrefix:(NSString *)str;
<14> 생성된 문자열의 내용이 어떤 문자로 끝날지 판단
- (BOOL)hasSuffix:(NSString *)str;
<15> 문자열을 지정한 문자열 (또는 @ "등) 을 통해 분할하여 그룹을 생성합니다
- (NSArray *)componentsSeparatedByString:(NSString *)separator;
<16> 주소에서 파일 이름 및 접미어 가져오기
NSString * fileName = [path lastPathComponent];
NSMutableString 가변 문자열
<1> 만들기
NSMutableString *str = [[NSMutableString alloc]init];`
<2> 지정된 위치에 컨텐츠 추가
- (void)insertString:@” ” atIndex: `
<3> 마지막에 내용 추가
- (void)appendString:@” ”`
<4> 마지막에 지정된 형식 내용 추가
- (void)appendFormat:@“%@,%@”,@“ a”,@“ b”`
<5> 삭제
- (void)deleteCharactersInRange:NSMakeRange( , )`
<6> 교체
- (void)replaceCharactersInRange:NSMakeRange( , ) withString:@” ”`
NSNumber 기본 데이터 유형 클래스 캡슐화
<1>int형
+(NSNumber *)numberWithInt:int `
(int)intValue`
<2>char형
+(NSNumber *)numberWithChar:’ ’`
(char)charValue`
<3>float형
+(NSNumber *)numberWithFloat:float `
(float)floatValue`
<4>더블형
+(NSNumber *)numberWithDouble:double
(double)doubleValue
<5>BOOL형
+(NSNumber *)numberWithBool:YES/NO
(BOOL)doubleValue
NSValue 패브릭 클래스 패키지
<1> 패키지
TRPoint p = {3,4};
valueWithBytes:&p objCType:@encode(TRPoint)
<2> 개봉
- (void)getValue:&p2
NSDate 시간
<1> 현재 시간 획득
NSDate *date = [[NSDate alloc]init];
<2>x초 지연 시간 획득
+ (instancetype)dateWithTimeIntervalSinceNow:30.0f
<3> 두 시간차 획득
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
<4> 지정된 형식의 시간을 받아 시스템 시간대로 자동 변환
NSDateFormatter *df = [[NSDateFormatter alloc]init];
df.dateFormat = @”yyyy-MM-dd hh:mm:ss”
(NSString *)df stringFromDate:[[NSDate alloc]init]
NSTimeZone * zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSData * localeTime = [date dateByAddingTimeInterval:interval];
NSArray 불변 배열
<1> 만들기
NSArray *array = @[@“ a”,(ObjectType)str,@“ b”];
<2> 배열 길이 획득
.count
<3> 그룹 아래 표시를 통해 원소 획득
- (ObjectType)objectAtIndex:(NSUInteger) ;
<4> 그룹 마지막 요소 획득
.lastObject
<5> 그룹 첫 번째 원소 획득
.firstObject
<6> 어떤 대상이 그룹의 하단에 있는 것을 가져옵니다. 만약 그룹에 이 대상이 존재하지 않는다면 쓰레기 값의 하단을 되돌려줍니다
- (NSUInteger)indexOfObject:@” ”
<7>OC 중수 그룹을 두루 훑어보는 세 가지 방식
a for 순환for (int i = 0; i < [stus count]; i++) {
Students *stu = [stus objectAtIndex:i];
NSLog(@”%@”, stu);
}
b for 빠른 열거// 1 2
for (Students *stu2 in stus) {
NSLog(@”%@”, stu2);
}
c 교체기 반복
//
// , nil;
NSEnumerator *enumerator = [stus objectEnumerator];
//
//
Students *st3 = nil;
while (st3 = [enumerator nextObject]) {
NSLog(@”%@”, st3);
}
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
NSArray * array = @[@"a",@"b",@"c"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
}];
<7> 사용자 정의 클래스를 저장하는 그룹을 출력합니다. description 방법을 다시 쓰고 출력 형식을 사용자 정의해야 합니다.
-(NSString *)description{
return [NSString stringWithFormat:@”name:%@ age:%d”, self.name, self.age];
}
NSLog(@”name:%@ age:%i”,stu.name, stu.age);
<8> 배열의 복사
(NSArray *)[[NSArray alloc]initWithArray: copyItems:YES]
(NSArray *)[[NSArray alloc]initWithArray: copyItems:NO]
Order 배열 정렬
<1> 정렬 규칙
SEL sel = @selector(compare:);
<2> 둘 비교
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
<3> 그룹이 기본 데이터 형식이 아닌 경우 compare 방법을 다시 써야 합니다
-(NSComparisonResult) compare:(Students *) otherStudent{
// if((self.age - otherStudent.age) >0)c
// return NSOrderedDescending;
// else if ((self.age - otherStudent.age) <0)
// return NSOrderedAscending;
// else
// return NSOrderedSame;
// int compare
NSNumber *n1 = [NSNumber numberWithInt:self.age];
NSNumber *n2 = [NSNumber numberWithInt:otherStudent.age]; return [n1 compare:n2];
// —
// return [self.name compare:otherStudent.name];
}
NSMutable Array 가변 배열
<1> 일반 창설
NSMutableArray *mArray =[[NSMutableArray alloc]init];
<2> 사전 정의된 스페이스 생성
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
<3> 생성 초기화
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
<4> 변수 그룹을 변수 그룹으로 전환
- (id)mutableCopy
<5> 요소를 끝에 추가
- (void)addObject:@” ”
<6> 지정된 위치에 요소 추가
- (void)insertObject:@” ” atIndex:
<7> 삭제 끝
- (void)removeLastObject
<8> 지정된 객체 삭제
- (void)removeObject:@” ”
<9> 지정된 위치 요소 삭제
- (void)removeObjectAtIndex:
<10> 모든 요소 삭제
- (void)removeAllObjects;
<11> 요소 수정
- (void)replaceObjectAtIndex: withObject:@” ”
NSSet 변경 불가 무질서 컬렉션 반복 불가(아래 첨자 없음)
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
- (BOOL)instancesRespondToSelector:@selector( );
- (id)performSelector:@selector( );
- (BOOL)respondsToSelector:(SEL)aSelector;
<1> 특정 클래스가 특정 프로토콜을 준수했는지 여부
- (BOOL) conformsToProtocol:@protocol( );
NSRange
NSRange는 구조체로 location은 0으로 시작하는 index이며 length는 객체의 길이를 나타냅니다.모두 NSUInteger 유형입니다.typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
<1> 문자열에 다른 문자열이 포함되어 있는지 여부
- (NSRange)rangeOfString:(NSString *)searchString;
NSRange struct
NSString 불변 문자열
<1> 만들기
NSString *str = @” ”;
<2> 포맷 생성
+ (instancetype)stringWithFormat:@“%@,%@”,@“ a”,@“ b”
<3> 처음부터 어느 위치로 분할
- (NSString *)substringToIndex:
<4> 중간에서 끝으로 분할
- (NSString *)substringFromIndex:
<5> 중간에서 길이 x 분할
- (NSString *)substringWithRange:NSMakeRange( , )
<6> 끝부분 추가
- (NSString *)stringByAppendingString:@” ”
<7> 지정된 형식으로 추가
- (NSString *)stringByAppendingFormat:@”%@ %@”,@” a”,@” b”`
<8> 위치 교체 지정
- (NSString *)stringByReplacingCharactersInRange:NSMakeRange( , ) withString:@” ”
<9> 파일에서 읽은 데이터의 인코딩 변환
NSString *path = @”/Users/apple/Desktop/test.txt”;
+ (nullable instancetype)stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil
<10> 문자열 비교(내용이 동일한지 여부)
- (BOOL)isEqualToString:@” ”`
<11> 대문자 문자열로 변환
(NSString *)uppercaseString
<12> 문자열 비교(크기 비교)
- (NSComparisonResult)compare:(NSString *)string;
만약 a가 b보다 크면 1로 돌아가고, 똑같이 0으로 돌아가고, 작게는 -1로 돌아간다.
<13> 생성된 문자열의 내용이 어떤 문자로 시작되는지 판단
- (BOOL)hasPrefix:(NSString *)str;
<14> 생성된 문자열의 내용이 어떤 문자로 끝날지 판단
- (BOOL)hasSuffix:(NSString *)str;
<15> 문자열을 지정한 문자열 (또는 @ "등) 을 통해 분할하여 그룹을 생성합니다
- (NSArray *)componentsSeparatedByString:(NSString *)separator;
<16> 주소에서 파일 이름 및 접미어 가져오기
NSString * fileName = [path lastPathComponent];
NSMutableString 가변 문자열
<1> 만들기
NSMutableString *str = [[NSMutableString alloc]init];`
<2> 지정된 위치에 컨텐츠 추가
- (void)insertString:@” ” atIndex: `
<3> 마지막에 내용 추가
- (void)appendString:@” ”`
<4> 마지막에 지정된 형식 내용 추가
- (void)appendFormat:@“%@,%@”,@“ a”,@“ b”`
<5> 삭제
- (void)deleteCharactersInRange:NSMakeRange( , )`
<6> 교체
- (void)replaceCharactersInRange:NSMakeRange( , ) withString:@” ”`
NSNumber 기본 데이터 유형 클래스 캡슐화
<1>int형
+(NSNumber *)numberWithInt:int `
(int)intValue`
<2>char형
+(NSNumber *)numberWithChar:’ ’`
(char)charValue`
<3>float형
+(NSNumber *)numberWithFloat:float `
(float)floatValue`
<4>더블형
+(NSNumber *)numberWithDouble:double
(double)doubleValue
<5>BOOL형
+(NSNumber *)numberWithBool:YES/NO
(BOOL)doubleValue
NSValue 패브릭 클래스 패키지
<1> 패키지
TRPoint p = {3,4};
valueWithBytes:&p objCType:@encode(TRPoint)
<2> 개봉
- (void)getValue:&p2
NSDate 시간
<1> 현재 시간 획득
NSDate *date = [[NSDate alloc]init];
<2>x초 지연 시간 획득
+ (instancetype)dateWithTimeIntervalSinceNow:30.0f
<3> 두 시간차 획득
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
<4> 지정된 형식의 시간을 받아 시스템 시간대로 자동 변환
NSDateFormatter *df = [[NSDateFormatter alloc]init];
df.dateFormat = @”yyyy-MM-dd hh:mm:ss”
(NSString *)df stringFromDate:[[NSDate alloc]init]
NSTimeZone * zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSData * localeTime = [date dateByAddingTimeInterval:interval];
NSArray 불변 배열
<1> 만들기
NSArray *array = @[@“ a”,(ObjectType)str,@“ b”];
<2> 배열 길이 획득
.count
<3> 그룹 아래 표시를 통해 원소 획득
- (ObjectType)objectAtIndex:(NSUInteger) ;
<4> 그룹 마지막 요소 획득
.lastObject
<5> 그룹 첫 번째 원소 획득
.firstObject
<6> 어떤 대상이 그룹의 하단에 있는 것을 가져옵니다. 만약 그룹에 이 대상이 존재하지 않는다면 쓰레기 값의 하단을 되돌려줍니다
- (NSUInteger)indexOfObject:@” ”
<7>OC 중수 그룹을 두루 훑어보는 세 가지 방식
a for 순환for (int i = 0; i < [stus count]; i++) {
Students *stu = [stus objectAtIndex:i];
NSLog(@”%@”, stu);
}
b for 빠른 열거// 1 2
for (Students *stu2 in stus) {
NSLog(@”%@”, stu2);
}
c 교체기 반복
//
// , nil;
NSEnumerator *enumerator = [stus objectEnumerator];
//
//
Students *st3 = nil;
while (st3 = [enumerator nextObject]) {
NSLog(@”%@”, st3);
}
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
NSArray * array = @[@"a",@"b",@"c"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
}];
<7> 사용자 정의 클래스를 저장하는 그룹을 출력합니다. description 방법을 다시 쓰고 출력 형식을 사용자 정의해야 합니다.
-(NSString *)description{
return [NSString stringWithFormat:@”name:%@ age:%d”, self.name, self.age];
}
NSLog(@”name:%@ age:%i”,stu.name, stu.age);
<8> 배열의 복사
(NSArray *)[[NSArray alloc]initWithArray: copyItems:YES]
(NSArray *)[[NSArray alloc]initWithArray: copyItems:NO]
Order 배열 정렬
<1> 정렬 규칙
SEL sel = @selector(compare:);
<2> 둘 비교
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
<3> 그룹이 기본 데이터 형식이 아닌 경우 compare 방법을 다시 써야 합니다
-(NSComparisonResult) compare:(Students *) otherStudent{
// if((self.age - otherStudent.age) >0)c
// return NSOrderedDescending;
// else if ((self.age - otherStudent.age) <0)
// return NSOrderedAscending;
// else
// return NSOrderedSame;
// int compare
NSNumber *n1 = [NSNumber numberWithInt:self.age];
NSNumber *n2 = [NSNumber numberWithInt:otherStudent.age]; return [n1 compare:n2];
// —
// return [self.name compare:otherStudent.name];
}
NSMutable Array 가변 배열
<1> 일반 창설
NSMutableArray *mArray =[[NSMutableArray alloc]init];
<2> 사전 정의된 스페이스 생성
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
<3> 생성 초기화
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
<4> 변수 그룹을 변수 그룹으로 전환
- (id)mutableCopy
<5> 요소를 끝에 추가
- (void)addObject:@” ”
<6> 지정된 위치에 요소 추가
- (void)insertObject:@” ” atIndex:
<7> 삭제 끝
- (void)removeLastObject
<8> 지정된 객체 삭제
- (void)removeObject:@” ”
<9> 지정된 위치 요소 삭제
- (void)removeObjectAtIndex:
<10> 모든 요소 삭제
- (void)removeAllObjects;
<11> 요소 수정
- (void)replaceObjectAtIndex: withObject:@” ”
NSSet 변경 불가 무질서 컬렉션 반복 불가(아래 첨자 없음)
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
- (NSRange)rangeOfString:(NSString *)searchString;
NSRange struct
<1> 만들기
NSString *str = @” ”;
<2> 포맷 생성
+ (instancetype)stringWithFormat:@“%@,%@”,@“ a”,@“ b”
<3> 처음부터 어느 위치로 분할
- (NSString *)substringToIndex:
<4> 중간에서 끝으로 분할
- (NSString *)substringFromIndex:
<5> 중간에서 길이 x 분할
- (NSString *)substringWithRange:NSMakeRange( , )
<6> 끝부분 추가
- (NSString *)stringByAppendingString:@” ”
<7> 지정된 형식으로 추가
- (NSString *)stringByAppendingFormat:@”%@ %@”,@” a”,@” b”`
<8> 위치 교체 지정
- (NSString *)stringByReplacingCharactersInRange:NSMakeRange( , ) withString:@” ”
<9> 파일에서 읽은 데이터의 인코딩 변환
NSString *path = @”/Users/apple/Desktop/test.txt”;
+ (nullable instancetype)stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil
<10> 문자열 비교(내용이 동일한지 여부)
- (BOOL)isEqualToString:@” ”`
<11> 대문자 문자열로 변환
(NSString *)uppercaseString
<12> 문자열 비교(크기 비교)
- (NSComparisonResult)compare:(NSString *)string;
만약 a가 b보다 크면 1로 돌아가고, 똑같이 0으로 돌아가고, 작게는 -1로 돌아간다.<13> 생성된 문자열의 내용이 어떤 문자로 시작되는지 판단
- (BOOL)hasPrefix:(NSString *)str;
<14> 생성된 문자열의 내용이 어떤 문자로 끝날지 판단
- (BOOL)hasSuffix:(NSString *)str;
<15> 문자열을 지정한 문자열 (또는 @ "등) 을 통해 분할하여 그룹을 생성합니다
- (NSArray *)componentsSeparatedByString:(NSString *)separator;
<16> 주소에서 파일 이름 및 접미어 가져오기
NSString * fileName = [path lastPathComponent];
NSMutableString 가변 문자열
<1> 만들기
NSMutableString *str = [[NSMutableString alloc]init];`
<2> 지정된 위치에 컨텐츠 추가
- (void)insertString:@” ” atIndex: `
<3> 마지막에 내용 추가
- (void)appendString:@” ”`
<4> 마지막에 지정된 형식 내용 추가
- (void)appendFormat:@“%@,%@”,@“ a”,@“ b”`
<5> 삭제
- (void)deleteCharactersInRange:NSMakeRange( , )`
<6> 교체
- (void)replaceCharactersInRange:NSMakeRange( , ) withString:@” ”`
NSNumber 기본 데이터 유형 클래스 캡슐화
<1>int형
+(NSNumber *)numberWithInt:int `
(int)intValue`
<2>char형
+(NSNumber *)numberWithChar:’ ’`
(char)charValue`
<3>float형
+(NSNumber *)numberWithFloat:float `
(float)floatValue`
<4>더블형
+(NSNumber *)numberWithDouble:double
(double)doubleValue
<5>BOOL형
+(NSNumber *)numberWithBool:YES/NO
(BOOL)doubleValue
NSValue 패브릭 클래스 패키지
<1> 패키지
TRPoint p = {3,4};
valueWithBytes:&p objCType:@encode(TRPoint)
<2> 개봉
- (void)getValue:&p2
NSDate 시간
<1> 현재 시간 획득
NSDate *date = [[NSDate alloc]init];
<2>x초 지연 시간 획득
+ (instancetype)dateWithTimeIntervalSinceNow:30.0f
<3> 두 시간차 획득
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
<4> 지정된 형식의 시간을 받아 시스템 시간대로 자동 변환
NSDateFormatter *df = [[NSDateFormatter alloc]init];
df.dateFormat = @”yyyy-MM-dd hh:mm:ss”
(NSString *)df stringFromDate:[[NSDate alloc]init]
NSTimeZone * zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSData * localeTime = [date dateByAddingTimeInterval:interval];
NSArray 불변 배열
<1> 만들기
NSArray *array = @[@“ a”,(ObjectType)str,@“ b”];
<2> 배열 길이 획득
.count
<3> 그룹 아래 표시를 통해 원소 획득
- (ObjectType)objectAtIndex:(NSUInteger) ;
<4> 그룹 마지막 요소 획득
.lastObject
<5> 그룹 첫 번째 원소 획득
.firstObject
<6> 어떤 대상이 그룹의 하단에 있는 것을 가져옵니다. 만약 그룹에 이 대상이 존재하지 않는다면 쓰레기 값의 하단을 되돌려줍니다
- (NSUInteger)indexOfObject:@” ”
<7>OC 중수 그룹을 두루 훑어보는 세 가지 방식
a for 순환for (int i = 0; i < [stus count]; i++) {
Students *stu = [stus objectAtIndex:i];
NSLog(@”%@”, stu);
}
b for 빠른 열거// 1 2
for (Students *stu2 in stus) {
NSLog(@”%@”, stu2);
}
c 교체기 반복
//
// , nil;
NSEnumerator *enumerator = [stus objectEnumerator];
//
//
Students *st3 = nil;
while (st3 = [enumerator nextObject]) {
NSLog(@”%@”, st3);
}
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
NSArray * array = @[@"a",@"b",@"c"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
}];
<7> 사용자 정의 클래스를 저장하는 그룹을 출력합니다. description 방법을 다시 쓰고 출력 형식을 사용자 정의해야 합니다.
-(NSString *)description{
return [NSString stringWithFormat:@”name:%@ age:%d”, self.name, self.age];
}
NSLog(@”name:%@ age:%i”,stu.name, stu.age);
<8> 배열의 복사
(NSArray *)[[NSArray alloc]initWithArray: copyItems:YES]
(NSArray *)[[NSArray alloc]initWithArray: copyItems:NO]
Order 배열 정렬
<1> 정렬 규칙
SEL sel = @selector(compare:);
<2> 둘 비교
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
<3> 그룹이 기본 데이터 형식이 아닌 경우 compare 방법을 다시 써야 합니다
-(NSComparisonResult) compare:(Students *) otherStudent{
// if((self.age - otherStudent.age) >0)c
// return NSOrderedDescending;
// else if ((self.age - otherStudent.age) <0)
// return NSOrderedAscending;
// else
// return NSOrderedSame;
// int compare
NSNumber *n1 = [NSNumber numberWithInt:self.age];
NSNumber *n2 = [NSNumber numberWithInt:otherStudent.age]; return [n1 compare:n2];
// —
// return [self.name compare:otherStudent.name];
}
NSMutable Array 가변 배열
<1> 일반 창설
NSMutableArray *mArray =[[NSMutableArray alloc]init];
<2> 사전 정의된 스페이스 생성
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
<3> 생성 초기화
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
<4> 변수 그룹을 변수 그룹으로 전환
- (id)mutableCopy
<5> 요소를 끝에 추가
- (void)addObject:@” ”
<6> 지정된 위치에 요소 추가
- (void)insertObject:@” ” atIndex:
<7> 삭제 끝
- (void)removeLastObject
<8> 지정된 객체 삭제
- (void)removeObject:@” ”
<9> 지정된 위치 요소 삭제
- (void)removeObjectAtIndex:
<10> 모든 요소 삭제
- (void)removeAllObjects;
<11> 요소 수정
- (void)replaceObjectAtIndex: withObject:@” ”
NSSet 변경 불가 무질서 컬렉션 반복 불가(아래 첨자 없음)
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
NSMutableString *str = [[NSMutableString alloc]init];`
- (void)insertString:@” ” atIndex: `
- (void)appendString:@” ”`
- (void)appendFormat:@“%@,%@”,@“ a”,@“ b”`
- (void)deleteCharactersInRange:NSMakeRange( , )`
- (void)replaceCharactersInRange:NSMakeRange( , ) withString:@” ”`
<1>int형
+(NSNumber *)numberWithInt:int `
(int)intValue`
<2>char형
+(NSNumber *)numberWithChar:’ ’`
(char)charValue`
<3>float형
+(NSNumber *)numberWithFloat:float `
(float)floatValue`
<4>더블형
+(NSNumber *)numberWithDouble:double
(double)doubleValue
<5>BOOL형
+(NSNumber *)numberWithBool:YES/NO
(BOOL)doubleValue
NSValue 패브릭 클래스 패키지
<1> 패키지
TRPoint p = {3,4};
valueWithBytes:&p objCType:@encode(TRPoint)
<2> 개봉
- (void)getValue:&p2
NSDate 시간
<1> 현재 시간 획득
NSDate *date = [[NSDate alloc]init];
<2>x초 지연 시간 획득
+ (instancetype)dateWithTimeIntervalSinceNow:30.0f
<3> 두 시간차 획득
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
<4> 지정된 형식의 시간을 받아 시스템 시간대로 자동 변환
NSDateFormatter *df = [[NSDateFormatter alloc]init];
df.dateFormat = @”yyyy-MM-dd hh:mm:ss”
(NSString *)df stringFromDate:[[NSDate alloc]init]
NSTimeZone * zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSData * localeTime = [date dateByAddingTimeInterval:interval];
NSArray 불변 배열
<1> 만들기
NSArray *array = @[@“ a”,(ObjectType)str,@“ b”];
<2> 배열 길이 획득
.count
<3> 그룹 아래 표시를 통해 원소 획득
- (ObjectType)objectAtIndex:(NSUInteger) ;
<4> 그룹 마지막 요소 획득
.lastObject
<5> 그룹 첫 번째 원소 획득
.firstObject
<6> 어떤 대상이 그룹의 하단에 있는 것을 가져옵니다. 만약 그룹에 이 대상이 존재하지 않는다면 쓰레기 값의 하단을 되돌려줍니다
- (NSUInteger)indexOfObject:@” ”
<7>OC 중수 그룹을 두루 훑어보는 세 가지 방식
a for 순환for (int i = 0; i < [stus count]; i++) {
Students *stu = [stus objectAtIndex:i];
NSLog(@”%@”, stu);
}
b for 빠른 열거// 1 2
for (Students *stu2 in stus) {
NSLog(@”%@”, stu2);
}
c 교체기 반복
//
// , nil;
NSEnumerator *enumerator = [stus objectEnumerator];
//
//
Students *st3 = nil;
while (st3 = [enumerator nextObject]) {
NSLog(@”%@”, st3);
}
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
NSArray * array = @[@"a",@"b",@"c"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
}];
<7> 사용자 정의 클래스를 저장하는 그룹을 출력합니다. description 방법을 다시 쓰고 출력 형식을 사용자 정의해야 합니다.
-(NSString *)description{
return [NSString stringWithFormat:@”name:%@ age:%d”, self.name, self.age];
}
NSLog(@”name:%@ age:%i”,stu.name, stu.age);
<8> 배열의 복사
(NSArray *)[[NSArray alloc]initWithArray: copyItems:YES]
(NSArray *)[[NSArray alloc]initWithArray: copyItems:NO]
Order 배열 정렬
<1> 정렬 규칙
SEL sel = @selector(compare:);
<2> 둘 비교
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
<3> 그룹이 기본 데이터 형식이 아닌 경우 compare 방법을 다시 써야 합니다
-(NSComparisonResult) compare:(Students *) otherStudent{
// if((self.age - otherStudent.age) >0)c
// return NSOrderedDescending;
// else if ((self.age - otherStudent.age) <0)
// return NSOrderedAscending;
// else
// return NSOrderedSame;
// int compare
NSNumber *n1 = [NSNumber numberWithInt:self.age];
NSNumber *n2 = [NSNumber numberWithInt:otherStudent.age]; return [n1 compare:n2];
// —
// return [self.name compare:otherStudent.name];
}
NSMutable Array 가변 배열
<1> 일반 창설
NSMutableArray *mArray =[[NSMutableArray alloc]init];
<2> 사전 정의된 스페이스 생성
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
<3> 생성 초기화
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
<4> 변수 그룹을 변수 그룹으로 전환
- (id)mutableCopy
<5> 요소를 끝에 추가
- (void)addObject:@” ”
<6> 지정된 위치에 요소 추가
- (void)insertObject:@” ” atIndex:
<7> 삭제 끝
- (void)removeLastObject
<8> 지정된 객체 삭제
- (void)removeObject:@” ”
<9> 지정된 위치 요소 삭제
- (void)removeObjectAtIndex:
<10> 모든 요소 삭제
- (void)removeAllObjects;
<11> 요소 수정
- (void)replaceObjectAtIndex: withObject:@” ”
NSSet 변경 불가 무질서 컬렉션 반복 불가(아래 첨자 없음)
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
TRPoint p = {3,4};
valueWithBytes:&p objCType:@encode(TRPoint)
- (void)getValue:&p2
<1> 현재 시간 획득
NSDate *date = [[NSDate alloc]init];
<2>x초 지연 시간 획득
+ (instancetype)dateWithTimeIntervalSinceNow:30.0f
<3> 두 시간차 획득
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
<4> 지정된 형식의 시간을 받아 시스템 시간대로 자동 변환
NSDateFormatter *df = [[NSDateFormatter alloc]init];
df.dateFormat = @”yyyy-MM-dd hh:mm:ss”
(NSString *)df stringFromDate:[[NSDate alloc]init]
NSTimeZone * zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSData * localeTime = [date dateByAddingTimeInterval:interval];
NSArray 불변 배열
<1> 만들기
NSArray *array = @[@“ a”,(ObjectType)str,@“ b”];
<2> 배열 길이 획득
.count
<3> 그룹 아래 표시를 통해 원소 획득
- (ObjectType)objectAtIndex:(NSUInteger) ;
<4> 그룹 마지막 요소 획득
.lastObject
<5> 그룹 첫 번째 원소 획득
.firstObject
<6> 어떤 대상이 그룹의 하단에 있는 것을 가져옵니다. 만약 그룹에 이 대상이 존재하지 않는다면 쓰레기 값의 하단을 되돌려줍니다
- (NSUInteger)indexOfObject:@” ”
<7>OC 중수 그룹을 두루 훑어보는 세 가지 방식
a for 순환for (int i = 0; i < [stus count]; i++) {
Students *stu = [stus objectAtIndex:i];
NSLog(@”%@”, stu);
}
b for 빠른 열거// 1 2
for (Students *stu2 in stus) {
NSLog(@”%@”, stu2);
}
c 교체기 반복
//
// , nil;
NSEnumerator *enumerator = [stus objectEnumerator];
//
//
Students *st3 = nil;
while (st3 = [enumerator nextObject]) {
NSLog(@”%@”, st3);
}
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
NSArray * array = @[@"a",@"b",@"c"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
}];
<7> 사용자 정의 클래스를 저장하는 그룹을 출력합니다. description 방법을 다시 쓰고 출력 형식을 사용자 정의해야 합니다.
-(NSString *)description{
return [NSString stringWithFormat:@”name:%@ age:%d”, self.name, self.age];
}
NSLog(@”name:%@ age:%i”,stu.name, stu.age);
<8> 배열의 복사
(NSArray *)[[NSArray alloc]initWithArray: copyItems:YES]
(NSArray *)[[NSArray alloc]initWithArray: copyItems:NO]
Order 배열 정렬
<1> 정렬 규칙
SEL sel = @selector(compare:);
<2> 둘 비교
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
<3> 그룹이 기본 데이터 형식이 아닌 경우 compare 방법을 다시 써야 합니다
-(NSComparisonResult) compare:(Students *) otherStudent{
// if((self.age - otherStudent.age) >0)c
// return NSOrderedDescending;
// else if ((self.age - otherStudent.age) <0)
// return NSOrderedAscending;
// else
// return NSOrderedSame;
// int compare
NSNumber *n1 = [NSNumber numberWithInt:self.age];
NSNumber *n2 = [NSNumber numberWithInt:otherStudent.age]; return [n1 compare:n2];
// —
// return [self.name compare:otherStudent.name];
}
NSMutable Array 가변 배열
<1> 일반 창설
NSMutableArray *mArray =[[NSMutableArray alloc]init];
<2> 사전 정의된 스페이스 생성
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
<3> 생성 초기화
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
<4> 변수 그룹을 변수 그룹으로 전환
- (id)mutableCopy
<5> 요소를 끝에 추가
- (void)addObject:@” ”
<6> 지정된 위치에 요소 추가
- (void)insertObject:@” ” atIndex:
<7> 삭제 끝
- (void)removeLastObject
<8> 지정된 객체 삭제
- (void)removeObject:@” ”
<9> 지정된 위치 요소 삭제
- (void)removeObjectAtIndex:
<10> 모든 요소 삭제
- (void)removeAllObjects;
<11> 요소 수정
- (void)replaceObjectAtIndex: withObject:@” ”
NSSet 변경 불가 무질서 컬렉션 반복 불가(아래 첨자 없음)
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
NSArray *array = @[@“ a”,(ObjectType)str,@“ b”];
.count
- (ObjectType)objectAtIndex:(NSUInteger) ;
.lastObject
.firstObject
- (NSUInteger)indexOfObject:@” ”
for (int i = 0; i < [stus count]; i++) {
Students *stu = [stus objectAtIndex:i];
NSLog(@”%@”, stu);
}
// 1 2
for (Students *stu2 in stus) {
NSLog(@”%@”, stu2);
}
//
// , nil;
NSEnumerator *enumerator = [stus objectEnumerator];
//
//
Students *st3 = nil;
while (st3 = [enumerator nextObject]) {
NSLog(@”%@”, st3);
}
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
NSArray * array = @[@"a",@"b",@"c"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
}];
-(NSString *)description{
return [NSString stringWithFormat:@”name:%@ age:%d”, self.name, self.age];
}
NSLog(@”name:%@ age:%i”,stu.name, stu.age);
(NSArray *)[[NSArray alloc]initWithArray: copyItems:YES]
(NSArray *)[[NSArray alloc]initWithArray: copyItems:NO]
<1> 정렬 규칙
SEL sel = @selector(compare:);
<2> 둘 비교
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
<3> 그룹이 기본 데이터 형식이 아닌 경우 compare 방법을 다시 써야 합니다
-(NSComparisonResult) compare:(Students *) otherStudent{
// if((self.age - otherStudent.age) >0)c
// return NSOrderedDescending;
// else if ((self.age - otherStudent.age) <0)
// return NSOrderedAscending;
// else
// return NSOrderedSame;
// int compare
NSNumber *n1 = [NSNumber numberWithInt:self.age];
NSNumber *n2 = [NSNumber numberWithInt:otherStudent.age]; return [n1 compare:n2];
// —
// return [self.name compare:otherStudent.name];
}
NSMutable Array 가변 배열
<1> 일반 창설
NSMutableArray *mArray =[[NSMutableArray alloc]init];
<2> 사전 정의된 스페이스 생성
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
<3> 생성 초기화
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
<4> 변수 그룹을 변수 그룹으로 전환
- (id)mutableCopy
<5> 요소를 끝에 추가
- (void)addObject:@” ”
<6> 지정된 위치에 요소 추가
- (void)insertObject:@” ” atIndex:
<7> 삭제 끝
- (void)removeLastObject
<8> 지정된 객체 삭제
- (void)removeObject:@” ”
<9> 지정된 위치 요소 삭제
- (void)removeObjectAtIndex:
<10> 모든 요소 삭제
- (void)removeAllObjects;
<11> 요소 수정
- (void)replaceObjectAtIndex: withObject:@” ”
NSSet 변경 불가 무질서 컬렉션 반복 불가(아래 첨자 없음)
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
NSMutableArray *mArray =[[NSMutableArray alloc]init];
NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:19];
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@” ”, (ObjectType)str, nil];
- (id)mutableCopy
- (void)addObject:@” ”
- (void)insertObject:@” ” atIndex:
- (void)removeLastObject
- (void)removeObject:@” ”
- (void)removeObjectAtIndex:
- (void)removeAllObjects;
- (void)replaceObjectAtIndex: withObject:@” ”
(1) 모든 대상은 하나의hash코드를 가지고 있으며,hash코드는 유일한 표지 대상에 사용된다.(hash 알고리즘)hash코드가 같으면 두 대상이 동쪽으로 갈 수 있고hash코드가 다르면 두 대상이 틀림없다고 생각한다.객체를 NSSet 컬렉션에 넣으면 객체의 hash 코드가 자동으로 호출되어 판단됩니다.
(2)hash코드가 서로 같을 때 대상의 isEqual 방법을 자동으로 호출하여 대상이 중복되는지 다시 판단하고 방법의 반환값에 따라 대상이 중복되는지 결정한다.
-(NSUInteger)hash{
NSLog(@“ hash ”);
return 1;
}
-(BOOL)isEqual:(id)object{
NSLog(@”isEqual ”);
//a.
if(self == object){
return YES;
}
//b.
if([object isKindOfClass:[Student class]]){
//c. _
Student *otherStudent = object;
if([self.name isEqualToString:otherStudent.name]&&(self.age == otherStudent.age)){
return YES;
}
else{
return NO;
}
}
else{
return NO;
}
}
NSMutableSet 가변 무질서 집합을 반복할 수 없음(아래 첨자 없음)
<1> 만들기
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
<2> 요소 추가
- (void)addObject:@” ”
<3> 요소 삭제
- (void)removeObject: @” ”
<4> 두 집합의 교집
- (void)intersectSet: (NSSet *)otherSet
<5> 두 집합의 합집합(집합은 무질서하기 때문에 출력 순서가 정해지지 않습니다)
- (void) unionSet: (NSSet *)otherSet
<6> 집합에 따라 다른 집합의 요소를 삭제합니다
- (void) minusSet: (NSSet *)otherSet
NSDictionary 사전
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
NSMutableSet *mSet = [NSMutableSet set];
NSMutableSet *mSet2 = [NSMutableSet setWithObjects:@”1”,@”two”, ,nil];
- (void)addObject:@” ”
- (void)removeObject: @” ”
- (void)intersectSet: (NSSet *)otherSet
- (void) unionSet: (NSSet *)otherSet
- (void) minusSet: (NSSet *)otherSet
<1> 사전 만들기
a 사전 대상 만들기(한 쌍 출현,value1,key1,value2,key2)
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: (id)firstObject,@“key1”,(id)secondObject,@“key2”nil];
b 배열을 통해 사전 만들기(instancetype)dictionaryWithObjects: (NSArray *)objects forKeys: (NSArray *)keys
c 기존 사전을 통해 사전 만들기(instancetype)dictionaryWithDictionary: (NSDictionary *)dict
d 빠른 사전 만들기NSDictionary *dict=@{
@" ":@[@" ",@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "],
@" ":@[@" ",@" ",@" "]
};
<2> 사전의 키 값 쌍 가져오기
.count
<3> 사전의 모든 키 가져오기
- (NSArray *) allKeys
<4> 사전의 모든value 가져오기
- (NSArray *)allValues
<5> 객체에서 키워드 값 가져오기
- (NSArray *)allKeysForObject: (ObjectType)anObject
<6> 키에 따라 해당하는value값
- (nullable ObjectType) objectForKey: (KeyType)aKey
<7> 사전의 요소를 옮겨다니기
NSArray *keys = [dict allKeys];
for (NSString *key in keys) {
NSString *value = [dict objectForKey:key];
NSLog(@”key-->%@ value-->%@”,key,value);
}
<8> 다중 중첩 사전 반복
NSArray *collegekeys = [university allKeys];
for (NSString *collegekey in collegekeys) {
NSDictionary *college = [university objectForKey:collegekey];
NSArray *classkeys = [college allKeys];
for (NSString *classkey in classkeys) {
NSDictionary *class = [college objectForKey:classkey];
for (Student *student in class) {
NSLog(@"name-->%@ age-->%i",student.name,student.age);
}
}
}
NSMutable Dictionary 사전 수정 가능
<1> 만들기
a 수정 가능한 빈 사전 만들기NSMutableDictionary *dict = [NSMutableDictionary dictionary];
b 미리 평가된 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
c 초기화 수정 가능한 사전 만들기NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
<2> 추가
a 요소 추가- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
사전 추가- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
<3> 사전 덮어쓰기
- (void)setDictionary:(NSDictionary *)otherDictionary;
<4> 삭제
a 키 값 쌍 삭제- (void)removeObjectForKey: (KeyType)aKey
b 여러 키 값 쌍 삭제NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
<5> 사전 비우기
- (void)removeAllObjects
NSTimer 타이머
일반 설정 및 방법
등록 정보fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기
시동 타이머- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.
생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithCapacity:18];
NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys:stu,@“1”,stu1,@“2”, nil];
- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
mutableDic[@"key"] = @"value";
- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
- (void)setDictionary:(NSDictionary *)otherDictionary;
- (void)removeObjectForKey: (KeyType)aKey
NSArray *keys = @[@"1",@"2"] ;
[dict removeObjectForKey:keys];
- (void)removeAllObjects
일반 설정 및 방법
등록 정보
fireDate
--> 타이머의 시작 시간을 설정합니다. 타이머의 시작과 정지를 관리하는 데 자주 사용됩니다.//
timer.fireDate = [NSDate distantPast];
//
timer.fireDate = [NSDate distantFuture];
timeInterval
-->읽기 전용 속성, 타이머 호출 간격 가져오기tolerance
--> NSTimer가 정확하지 않기 때문에 이 값을 통해 오차 범위를 설정합니다.valid
(isValid
--> 타이머가 유효한지 확인userInfo
--> 매개 변수 정보 얻기시동 타이머
- (void)fire;
타이머 제거- (void)invalidate;
타이머 방법
NSTimeInterval
: 호출 간격target
: 트리거자selector
: 트리거 방법userInfo
: 타이머가 효력을 상실할 때 지정한 대상에게 이 타이머를 보류하고 방출합니다. nilrepeats
을 선택할 수 있습니다. YES일 때 타이머는 효과가 없거나 방출될 때까지 계속 순환합니다. NO일 때 타이머는 한 번 순환해서 효력을 상실합니다invocation
: NSInvocation 대상을 만들고 트리거 대상과 방법을 설정합니다.생성되고 순환이 추가되며 수동 Fire로 시작할 필요가 없습니다
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
NSInvocation * invo = [NSInvocation invocationWithMethodSignature:[[self class] instanceMethodSignatureForSelector:@selector(init)]];
[invo setTarget:self];
[invo setSelector:@selector(myLog)];
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep
://
[[NSRunLoop mainRunLoop]addTimer:timer forMode:NSDefaultRunLoopMode];
//
[timer fire];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.