기초 문법
.h 헤더 파일과 .m 구현 파일 2개가 존재한다.
헤더 파일에는 클래스나 변수, 메서드를 선언해 주고 .m 파일에서 자세한 구현 사항을 기술한다.
한 문장이 끝날 때마다 세미콜론을 사용해야 한다.
#import
#import "headerSomethingHeader.h"
#import <folder/Something.h>
외부 라이브러리, 프레임워크, 프로젝트 내에 있지만 다른 파일에 선언된 클래스를 사용할 때 import해 준다.
구현 파일에서도 자신의 헤더 파일을 반드시 import 해야 하며, .h 파일에서 import 한 내용은 .m 에서 import할 필요가 없다.
각각 파일별로 관리된다고 보면 되며, C언어와 비슷하게 사용할 클래스가 있다면 import하여 사용한다.
클래스 선언
@interface Person : NSObject <someProtocol, anotherProtocol>
// instance
{
int age;
static int value2 // 선언한 파일 내에서만 접근 가능
// 만약 method 내에서 static keyword 변수가 있다면 내부에서만 사용 가능
NSString *name;
NSString *favoriteSubject;
}
// property
@property (atomic, assign) int age;
@property (nonatomic, retain) NSString *name;
// method 선언
- (void)methodWithParameter:(Int)value; // 인스턴스 메서드
@end
// 밖에서 선언 시 전역변수로 사용
- atomic / nonatomic
- atomic: 해당 값에 쓰기를 할 때 lock을 걸어 여러 스레드에서 동시에 한 변수에 접근하는 것을 막는다.
- nonatomic: 위를 막지 않고 속도가 빠름
- strong(retain), weak(assign)
- strong: 강한 참조!
- weak: 약한 참조
- instance / class method
- ‘-‘로 시작하는 함수는 instance method
- ‘+’로 시작하는 함수는 class method
헤더 파일이 아닌 구현 파일에서 @interface , @end 를 사용할 경우, 해당하는 클래스 / 변수 / 메서드는 private 으로 동작한다.
class로 선언하려고 할 경우 NSObject 를 상속받아야 한다.
프로토콜을 채택할 때는 <> 을 이용한다.
변수의 경우, Objective-C 객체의 경우에는 변수명 앞에 *를 표시해 준다.
@property NSNumber *yearOfBirth;
@property int yearOfBirth;
Enum
- normally define
typedef enum ShapeType : NSUInteger {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
- macro
typedef NS_ENUM(NSUInteger, ShapeType) {
kCircle,
kRectangle,
kOblateSpheroid
};
CG_INLINE
CG_INLINE NFilterMargin setMargin(NSInteger left, NSInteger top, NSInteger right, NSInteger bottom)
{
NFilterMargin NFilterMargin;
NFilterMargin.left = left;
NFilterMargin.top = top;
NFilterMargin.right = right;
NFilterMargin.bottom = bottom;
return NFilterMargin;
}
인라인 함수로 사용될 수 있다는 거인듯?
근데인라인함수가뭔데 모르겟어요 더알아볼게요
~ 나중에 계속 ~
id Type
- C언어의 포인터를 포함하여 정의한 타입!
- Objc의 모든 오브젝트 변수들은 모두 포인터 타입이기 때문에, 어떤 것도 지칭해서 사용할 수 있는 id Type으로 만들어 편하게 사용하기 위해 사용한다. (Swift에서는 Any랑 비슷한듯?)
- 또한, 형변환 없이 사용할 수 있기 때문에 편리하다.
- 객체가 무얼 담느냐, 무얼 지칭하느냐에 따라서 변수의 타입이 갈리기 때문에 런타임 시 타입이 정해진다.
bridging-header(swift↔Objc)

objc .m 파일 하나 대충 만든다
그 이후에 Xcode가 너 bridgingHeader 만들 거냐고 물어봄
그럼 ㅇㅇ 하면 댐
근데 만약에 안 만들어 줬다?
그럼… 만들어야지…
프로젝트이름-Bridging-Header 로 옵젝씨 파일 만든 후에 사용할 헤더들 추가하면 된당
그리고 빌드 셋팅에서 확인!!
만약에 Xcode가 알아서 만들어줬더라도 혹시 안 되어 있을 수 있으니 확인 ㅇㅇ
현재 취뽀 해서 기존 프로젝트의 Objc 코드를 이해하고 잇다 ,, ^__^
근데 진짜 C랑 Swift의 언저리에 있는 느낌? 이지만 왠지 C에 더 가까운 것 같기도 하고?
뭔가 와 이 부분은 진짜 C기반 언어인 게 보인당!! 싶으면서도 Objc만의 문법도 많은 것 같다
물론 Swift랑 겹치는 부분도 있고~~ (당연함 Swift가 Objc기반 .. ..)
아무튼 :3
C도 했고 swift도 했어서 그나마~~~~ 적응하고 있는 것 같당...
뭔소린지 모르겠지만 뭔소린지 알겠는 수준임(앞으로는 더낫겟지..)
따라서 옵젝씨 문법 정리는 한 번으로 안 끝나고 계속될 예정이다 . . .
언제까지? 내가 짱이 될 때까지...................................
'iOS > Objective-C' 카테고리의 다른 글
Arithmetic Overflow in Swift & Objective-C (0) | 2025.04.07 |
---|---|
[Objective-C] hooking과 method swizzling (0) | 2024.04.18 |