검색결과 리스트
글
테이블 뷰의 섹션간 기본 margin 설정
아래값이 기본설정이 되며 각 섹션에서 셋팅하는 Header, Footer 값은 아래 값에 더해서 결정된다.
[tableView setSectionHeaderHeight:0];
[tableView setSectionFooterHeight:0];
글
글
NSArray *names = [UIFont familyNames];
NSArray *fontFaces;
NSLog(@"Font FamilyNames");
for (NSString *name in names) {
NSLog(@"Font Family: %@",name);
fontFaces = [UIFont fontNamesForFamilyName:name];
for (NSString *fname in fontFaces) {
NSLog(@" %@",fname);
}
}
글
싱글턴 객체 : MyGizmoClass
인스턴스를 얻기위한 메서드 : sharedManager
alloc이나 init을 이용한 생성시에도 이미 생성된 인스턴스를 돌려주기 위해 allocWithZone과 copyWithZone 메서드를 아래와 같이 구현한다.
장점 :
- 팩토리 클래스나 메서드를 새로 선언하지 않아도 일반 클래스 사용하듯 싱글턴 사용
- 기존에 구현된 클래스를 싱글턴으로 변경하는 경우 기존코드의 변경없이 해당 클래스의 변경만으로 가능
단점 :
- 만든 당사자가 아니면 싱글턴인지 알수 없을수도 있
- 테스트하기 쉬운코드인지는 좀더 사용해보고 판단할일
추가적인것은 더 개발을 해봐야 알수 있을것 같음
static MyGizmoClass *sharedGizmoManager = nil; |
+ (MyGizmoClass*)sharedManager |
{ |
if (sharedGizmoManager == nil) { |
sharedGizmoManager = [[super allocWithZone:NULL] init]; |
} |
return sharedGizmoManager; |
} |
+ (id)allocWithZone:(NSZone *)zone |
{ |
return [[self sharedManager] retain]; |
} |
- (id)copyWithZone:(NSZone *)zone |
{ |
return self; |
} |
- (id)retain |
{ |
return self; |
} |
- (NSUInteger)retainCount |
{ |
return NSUIntegerMax; //denotes an object that cannot be released |
} |
- (void)release |
{ |
//do nothing |
} |
- (id)autorelease |
{ |
return self; |
} |
글
출처 : xcode 개발자 페이지 Localizing String Resource
/* Insert Element menu item */ |
"Insert Element" = "Insert Element"; |
/* Error string used for unknown error types. */ |
"ErrorString_1" = "An unknown error occurred."; |
Core Foundation macros:
CFCopyLocalizedStringCFCopyLocalizedStringFromTableCFCopyLocalizedStringFromTableInBundleCFCopyLocalizedStringWithDefaultValue
Foundation macros:
NSLocalizedStringNSLocalizedStringFromTableNSLocalizedStringFromTableInBundleNSLocalizedStringWithDefaultValue
파일 인스펙터 그림
글
....
if (nil != mSelectedImage)
{
[mSelectedImage release];
}
mSelectedImage = [aSelectedImage retain];
....
풀어서 이야기 하자면 선택된 이미지가 nil이 아니면(이전에 선택되었던 이미지가 있었다면) 해당 이미지는 release하고, 새로 선택한 이미지를 할당 하자는 이야기다. 일단 첫번째 문제는 nil이 아닌지 여부는 아래와 같이 쉽게 바꿔도 무방하다.
...
if (mSelectedImage) {
...
두번째 문제는 release라는 메시지를 보내는 것인데, 사실 mSelectedImage가 nil이어도 메시지를 보낼수 있고 객체가 nil을 받는경우 nil을 리턴한다는 성질을 이용한다면 사실 if문자체가 특별히 의미도 없을뿐더러 불필요한 연산을 수행하게 된다.여기까지 코드를 정리하자면 아래와 같다.
... [mSelectedImage release]; mSelectedImage = [aSelectedImage retain]; ...세번째 문제는 aSelectedImage와 mSelectedImage가 같은 객체일경우에 발생한다.
mSelectedImage가 이미 할당되어있고 aSelectedImage가 같은 이미지로 입력이 들어왔다고 할때
마지막 코드의 첫번째줄에서 mSelectedImage는 이미 nil이 되었고, 두번째 코드에서는 nil에 메시지를 날린 격이므로, 결과적으로는 nil이 할당된다.
아마 사용자는 현재 이미지를 선택했으므로 그냥 현재 이미지를 표시해주면 되는데, 어이없게 화면에서 선택한 이미지가 나오지 않는 상황을 만나게 된다.
이 문제를 해결하는 방법은 아래와 같다.
... [mSelectedImage autorelease]; mSelectedImage = [aSelectedImage retain]; ...중첨되는 변수사용시 앱이 죽는 경우는 이제좀 모면했으려나
글
링크를 걸수 없어 출처는 아래 경로로 공유 합니다.
The Objective-C Programming Language -> Defining a Class -> Class Implementation -> The Scope of instance variables----------------------------------
@interface Worker : NSObject |
{ |
char *name; |
@private |
int age; |
char *evaluation; |
@protected |
id job; |
float wage; |
@public |
id boss; |
} |
- promoteTo:newPosition |
{ |
id old = job; |
job = newPosition; |
return old; |
} |
글
그럼 어떻게 구현해야 할까? 결론적으로 말하자면, static지시자가 존재하고 이것의 속성을 통해 우회하여 구현할수는 있다. ㅎ
먼저 Java에서 static이 어떤 역할을 하는지 정리해 보자.
1. 클래스가 내부에서 만 접근가능
2. 해당 클래스의 인스턴스들에서 공통적으로 접근 가능
3. 클래스 메서드(java에서 static메서드)를 통해서 해당 변수에 접근이 가능하다.
4. protected로 선언하는 경우 상속이 가능
Objective-c에서 "static" 변수 선언은 아래와 같은 기능을 한다.
1. 범위 : 선언된 클래스 내부로 한정되며, 정확히는 해당 선언이 있는 클래스 파일 내부로 한정된다.
2. 상속할수 없고, 하위 클래스에서 직접 접근할수 없다.
3. static을 통하지 않고서라도 external변수를 사용해서도 가능하다, 하지만 static객체의 제한된 범위는 각각의 구분된 객체 안에서 캡슐화 하는 목적에 좀더 알맞는다.
출처 : https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-BAJCDADF
Variables and Class Objects 항목 참조
위의 사실로 미루어 볼때 아래와 같이 구현하면 상속은 못하더라도 원하는 구현은 할수 있다.
* .m 파일에 static변수를 선언
* 초기 값을 가지게 하고 싶다면 클래스 초기화시 동작하는 클래스 메서드 +(void) initialize 함수를 통해 해당 static 변수를 초기화 할수 있다.
* 기타 클래스 메서드 구현을 통해 static 변수에 접근할 수 있다는 이야기. ㅎ
참고 : 싱글턴 인스턴스 작성하기
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html
최하단 : Creating a Singleton Instance 참조
글
하지만 실제로는 파라미터로 간단히 사용할때나, 중복 include로 인한 잠재적인 문제를 줄여주기 위한 목적으로 사용한다고 한다.
사용 범위는 메서드의 파라미터의 타입으로서 해당 클래스을 사용할때뿐인것 같다.
만약 리턴값으로 해당 값을 사용하거나, 인스턴스변수로 사용할때, 파라미터로 넘어올때 해당 객체 안의 값을 가져오는경우(실제로를 getter 메시지를 호출)에는 #import를 사용해야만 한다.
애플 문서내용은 아래와 같다.
-------------------------------------------------
원문 :
https://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocDefiningClasses.html
@class Rectangle, Circle; |
- (void)setPrimaryColor:(NSColor *)aColor; |
글
아래 예제 ㅎ
NSURL *url = [NSURL URLWithString:keyUrl];
NSString * result = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"result : %@", result);
내일은 요걸 공부해 봐야겠네요 ㅎ
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-170129
RECENT COMMENT