nil 및 null 및 NSNull 차이점 및 관련 질문

nil 및 null 및 NSNull 차이점 및 관련 질문


1. nil과 null은 글자의 뜻에서 쉽게 이해할 수 있다. nil은 하나의 대상이고 Null은 하나의 값이다. 나는 nil은 대상을 공백으로 설정하고 null은 기본 유형을 공백으로 설정한다. 개인적인 느낌은 약간 속성과 같다. 기본 유형은 assign NSString 유형으로 나누면 copy를 일반적으로 분배하고 대상은 보통retain을 사용한다.그리고 우리는nil 호출 방법에 대해crash나 버퍼링 이상이 발생하지 않습니다.
한 단락을 보다nil -> Null-pointer to objective- c object NIL -> Null-pointer to objective- c class null-> null pointer to primitive type or absence of data. NSURL *url = nil; Class  class = Nil; int *pointerInt = NULL; nil ,Nil ,NULL 。 nil,Nil, NULL 。

2. NSNULL, NULL과 nil은 본질적으로 똑같아야 한다. NULL과 nil은 사실 0이다. 그러나 Objective-c에서 NSArray와 같은 유형에 대해 nil이나 NULLL은 그 중의 Object로 할 수 없다. 만약에 NSArray를 정의하여 메모리를 분배하고 그 중의 내용을 비워 두려고 한다.[NSNULL null에서 되돌아오는 대상을 사용하여 NSArray의 내용을 초기화할 수 있습니다. 제 느낌은 C 언어의malloc 메모리 공간과 비슷하고memset으로 이 공간의 값을 0으로 초기화합니다.
_viewControllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < _pages; i++) {
[_viewControllers addObject:[NSNull null]];
}
ymBaseController *controller = [_viewControllers objectAtIndex:page];
         if ((NSNull *)controller == [NSNull null]) 
    {
...
            }
    [_viewControllers replaceObjectAtIndex:page withObject:controller];

3. 연구할 수 있는 문제 하나
dealloc에서
-(void) dealloc
{
self.test = nil; 
[_test release];
test = nil;
}
이 몇 개의 차이
제일 쉬운 거 먼저.
 [_test release]; 이것은 인용 기술을 1로 줄이는 것이다. 이른바 인용 계수란 여러 개의 바늘이 하나의 메모리 실체를 가리키는 것을 보는 것이다. release가 한 번에 바늘이 하나를 줄이면release가 0이 되면 이 메모리를 시스템에 진정으로 돌려줄 때이다.
그리고 셀프.test = nil;속성과 setter, Getter 방법을 설명하면 어렵지 않아요.
-(void) setTest:(NSString *)newString
{
if(_test != newString)
[_test release];
_test = [newString retain];
}
-(NSString *)test
{
return 
 _test;
}
이것은setter와getter 방법입니다. 이 문제에서 아까 코드가 바뀐 것과 같습니다.
if(_test != nil)
[_test release];
_test = nil;
지금은 쉽게 설명할 수 있다. setter 방법은retain nil 대상을 할 수 있다. 그 전에 이미release가 오래된 대상을 만들었다. 이 방법의 장점은 구성원 변수가 랜덤 데이터를 가리킬 기회조차 없고 다른 방식을 통해 랜덤 데이터를 가리키는 상황이 나타날 수 있다는 것이다.release가 끝난 후에 만약 다른 방법으로 그것을 저장해야 한다면, dealloc가 이미 dealloc가 되었다면,crash가 되고,nil을 가리키면 오류가 발생하지 않을 것입니다.nil은 말하자면 계수기가 0이라고 한다. 이렇게 말하자면, 진정release의 대상이 될 때 NSLog는 가리키는 메모리 컨트롤을 출력할 수 없고, nil일 때 가리키는 메모리 공간을 출력할 수 있다.
그럼 지금도 테스트 = nil 설명하기 어렵지 않아요. 
단순히 이런 용법은 자신이 자신에게 메모리 유출을 만들었다고 할 수 있는데, 여기서 이렇게 이해할 수 있는 것은 대상을 가리키는 지침을 대상과 직접적으로 일도양단하는 것과 같다.테스트가 nil을 가리키도록 합니다. 메모리 실체는 사라지지 않고 시스템 회수도 없습니다.

좋은 웹페이지 즐겨찾기