다크호스 프로그래머 - autorelease 및 Block

5650 단어
-Java 교육, 안드로이드 교육, iOS 교육,.Net 교육, 고객과의 커뮤니케이션 기대 -
/* 1.autorelease의 기본 사용법 1은 대상을 자동 방출 탱크에 넣는다 2는 자동 방출 탱크를 소각할 때 탱크의 모든 대상에 대해release 조작 3을 한 번 한다. 대상 자체를 되돌려준다 4는 autorelease 방법을 호출한 후 대상 계수기는 변하지 않는다
2. autorelease의 장점 1'대상이 방출되는 시간에 관심이 없다 2'release를 언제 호출할지 관심이 없다
3. autorelease의 경우 주의1>메모리가 비교적 큰 대상을 함부로 사용하지 마십시오2>메모리가 비교적 작은 대상을 autorelease로 사용하면 큰 영향을 주지 않습니다
4. 오류 쓰기 1'alloc 이후 autorelease 호출, release 호출
@autoreleasepool
 {
    Person *p = [[[Person alloc] init] autoreleasepool];
    [p release];
 }


2> 여러 번 autorelease 호출
 @autoreleasepool
 {
    Person *p = [[[[Person alloc] init] autoreleasepool] autoreleasepool];
 }

5. 자동 풀링 1은 iOS 프로그램을 실행하는 동안 수많은 풀을 생성합니다.이 연못들은 창고 구조로 존재한다(선진후출)2
6. 자동 풀링 방식 1 iOS 5.0 이전
NSAutoreleasepool *pool = [[NSAutoreleasepool alloc] init];
 [pool release];   [pool drain];

#시스템이 자체적으로 가지고 있는 방법에는alloc,new,copy가 포함되어 있지 않다. 되돌아오는 대상은 모두 autorelease라는 것을 의미한다. #개발에서 자주 클래스 방법을 제공한다. 이미 autorelease가 만들어진 대상을 신속하게 만들 때 클래스 이름을 직접 사용하지 말고 일반적으로self를 사용한다.
 + (id)person
 {
    return [[[self alloc]init] autorelease];
 }

#import 
@interface Person : NSObject

@property (nonatomic, assign) int age;

+ (id)person;
@end

@implementation Person

+(id)person
{
    return [[[Person alloc] init] autorelease];
}
- (void)dealloc;
{
    NSLog("@%d       ", _age);

    [super dealloc];
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool
    {
        Person *p1 = [Person person];

        p.age = 100;
    }
    return 0;
}

Block의 소개: 1. Block은 코드를 봉하여 언제든지 2. Block은 가장 함수 매개 변수나 함수의 반환 값을 실행할 수 있고 그 자체는 입력 매개 변수나 반환 값을 가져올 수 있다. 3. 애플 정부는 Block을 최대한 많이 사용하라고 제안했다.다중 루틴, 비동기 작업, 집합 반복, 집합 정렬, 애니메이션 전환에 사용되는 많은 Block이 파악해야 할 것들 1
 int (^sumBlock)(int, int);
 void (^myblock)();

2>Block 봉인 코드를 어떻게 활용
 ^(int a, int b)
 {
 return a - b;
 };
 ^()
 {
 NSLog(@"-----");
 }

3. Block 액세스 바깥 변수 * Block 내부 액세스 바깥 변수 * 기본적으로 Block 내부 액세스 바깥 변수 수정 불가 * 국부 변수에Block 키워드, 이 부분 변수는 Block 내부에서 수정할 수 있습니다
4. typedef를 이용하여 Block 유형 정의
#import 

//    Myblock  
typedef int  (^Myblock)(int, int);

int main(int argc, const char * argv[])
{
    int (^sumblock)(int, int) = ^(int a, int b)
    {
        return a + b;
    };
    int c = sumblock(10, 11);
    //typedef
    //Myblock sumBlock;
    //sumblock = ^(int a , int b)
    //{
    //   return a + b;
    //}


    void (^lineBlock)(int) = ^(int n)
    {
        for (int i = 0; iNSLog(@"----------");
        }
    };
    return 0;
}


좋은 웹페이지 즐겨찾기