NSCopy 및 NSMutableCopy 기술 포인트
7779 단어 copy
#import <Foundation/Foundation.h>
void test1()
{
NSString *str = [NSString stringWithFormat:@"age is %i", 10];
NSString *str1 = [str copy];
NSLog(@"%i", str == str1);
NSString *str2 = [str mutableCopy];
NSLog(@"%i", str2 == str);
}
void test2()
{
NSMutableString *str = [NSMutableString stringWithFormat:@"age is %i", 11];
NSString *str1 = [str copy];
NSMutableString *str2 = [str mutableCopy];
[str appendFormat:@"1"];
NSLog(@"%i", str == str2);
NSLog(@"%i", str == str1);
NSLog(@"%@", str);
NSLog(@"%@", str1);
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
test2();
}
return 0;
}
4. 대상 복사의 실례 대상의 복사, 주요 주의점
1. NSCopying 프로토콜이 있어야 합니다. 2.다시 쓰기 필요 - (id) copyWithZone: (NSZone *) zone 메서드
GoodStudent.h
#import "Student.h"
@interface GoodStudent : Student
@property (nonatomic, assign) int age;
+(id)goodStudentWithName:(NSString *)name withAge:(int)age;
@end
GoodStudent.m
#import "GoodStudent.h"
@implementation GoodStudent
+(id)goodStudentWithName:(NSString *)name withAge:(int)age
{
GoodStudent *stu = [super studentWithName:name];
stu.age = age;
return stu;
}
-(id)copyWithZone:(NSZone *)zone
{
GoodStudent *copy = [super copyWithZone:zone];
copy.age = self.age;
return copy;
}
-(NSString *)description
{
return [NSString stringWithFormat:@"%@-%i", self.name, self.age];
}
@end
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject <NSCopying>
@property (nonatomic, copy) NSString *name;
+(id)studentWithName:(NSString*)name;
@end
Student.m
#import "Student.h"
@implementation Student
+(id)studentWithName:(NSString *)name
{
Student *stu = [[[[self class] alloc] init] autorelease];
stu.name = name;
return stu;
}
- (id)copyWithZone:(NSZone *)zone
{
Student *copy = [[self class] allocWithZone:zone];
copy.name = self.name;
return copy;
}
-(NSString *)description
{
return [NSString stringWithFormat:@"%@", self.name];
}
-(void)dealloc
{
[_name release];
[super dealloc];
}
@end
main.m
#import <Foundation/Foundation.h>
#import "GoodStudent.h"
void test1()
{
Student *stu = [Student studentWithName:@"name1"];
Student *stu1 = [stu copy];
NSLog(@"%@", stu);
NSLog(@"%@", stu1);
}
void test2()
{
GoodStudent *stu1 = [GoodStudent goodStudentWithName:@"name1" withAge:10];
GoodStudent *stu2 = [stu1 copy];
NSLog(@"%@", stu1);
NSLog(@"%@", stu2);
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
test2();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
파일 내용 및 파일 경로의 단수 및 복수 대체 텍스트를 사용하여 원본 파일을 대상에 붙여넣기기본 코드로 많은 수의 파일과 폴더를 복사하고 파일 내부의 여러 줄과 파일 및 폴더의 이름을 바꿔야 하는 경우가 많으며 시간이 많이 걸립니다😢. 이 문제를 해결하기 위해 나를 위해 할 수 있는 유틸리티를 작성했습니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.