1.å¦ä½å¨Windowsä¸ç¼è¯Objective-C
2.IOS学习笔记之Object-C(一)
3.å¦ä½å¨c++ä¸ï¼è°ç¨objective-c
4.Objective-C简介
5.å¦ä½ç解 Objective-Cç¼ç¨çKVO åç
å¦ä½å¨Windowsä¸ç¼è¯Objective-C
1ãå®è£ GNUstep
GNUstep Windows Installeræä¾äºWindowså¹³å°ä¸çObject-Cç模æå¼åç¯å¢ï¼ä¸å ±æå个软件å ï¼å ¶ä¸GNUstep SystemåGNUstep Coreæ¯å¿ è£ çï¼GNUstep DevelåCairo Backendæ¯éè£ çãåªå®è£ å两个就å¤äºã
2ãç¼åObjective-C代ç
å®è£ å®æåï¼å¨å¼å§èåéçGNUstepé项éæ§è¡shellï¼å°±è½æå¼å½ä»¤è¡ãç´æ¥å¨Windowséè¿å ¥C:/GNUstep/home/Administratorï¼æçæ¯Administratorï¼å¯è½æçä¸ä¸æ ·ï¼ç®å½ï¼å¨è¿éç¨ä½ å欢çå·¥å ·ï¼ç°å¨UltraEditåNotepad++ç¼è¾å¨å¥½åå¯ä»¥ä»£ç é«äº®ï¼ç¼åObject-Cç¨åºã
å¦ï¼HelloWorld.m
#import <Foundation/Foundation.h>
int main (int argc,源码 const char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello World!");
[pool drain];
return 0;
}
3ãé ç½®ç¯å¢åé
è¿ä¸æ¥å¾éè¦ãGNUstep.shæ¯ç¨æ¥è®¾ç½®GNUstepå¼åç¯å¢åéçï¼å¦æ没ææ§è¡ï¼å°±ä¼æå¾å¤å¤´æ件ï¼åºæ件ï¼å½ä»¤æ¾ä¸å°
å¨ä¸ä¸ªç®å½éå好äºæºä»£ç 以åï¼ç¼åä¸ä¸ªmakeé ç½®æ件ï¼ååå¿ é¡»å«GNUmakefileï¼å 容æ¯
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME=Test
Test_OBJC_FILES=HelloWorld.m
include $(GNUSTEP_MAKEFILES)/tool.make
å¯ä»¥ä¿®æ¹ä¸é¢çé»ä½é¨å
ç¶åå°±æ¯
make
å½ä»¤è¿è¡æåå°±å¯ä»¥çå°æ°å¢äºä¸ä¸ªobjç®å½ï¼éé¢å°±æä½ è¦çå¯æ§è¡æ件å.oæ件ã
OK æå®äºã
IOS学习笔记之Object-C(一)
Objective-C(简称OC)作为iOS开发的核心语言,具备强大的源码面向对象编程能力,同时在语法设计上相比C++、源码Java更简单易用。源码OC基于C语言搭建,源码提供了最少复杂性面向对象语法,源码kk唱响源码完全兼容C语言,源码开发过程中可以自由混入C或C++代码,源码增强了语言的源码灵活性和实用性。
在语法概述中,源码OC取消了命名空间(包)概念,源码但提供了类名前缀作为类名区分机制,源码如`NSString`、源码`NSArray`的源码前缀NS有助于避免名称冲突。关键字以@开头以防止与C和C++关键字冲突,源码例如访问字符串以@"Hello"格式,更体现了语言设计的精简。
面向对象语法中,OC中类通常用`.h`和`.m`文件分隔描述与实现。`.h`文件用于声明成员变量、方法,内核源码和aosp`.m`文件用于其实现。这种结构有助于代码的组织与复用。在类的定义中,通过点语法访问成员变量,只有@public修饰的变量可以全局访问,而私有成员只能在类内部或其子类中使用。此外,OC提供了构造方法、静态方法等特有的语法支持。
内存管理在OC中是springmvc源码和原理关键之一,采用自动引用计数(ARC)来处理内存分配与释放,对象间的内存管理需格外注意,如避免循环引用导致内存泄露。使用autorelease pool统一管理临时对象的内存释放,程序结束时,自动释放池内的对象被统一回收。正确管理对象的创建与释放,对于避免内存管理错误至关重要。
OC中的@property与@synthesize特性提供了简洁的属性定义,自动生成getter和setter方法,api自绘源码减少冗余代码,并支持不同访问级别、类型转换、原子性和性能优化策略,方便开发高效、安全的iOS应用。
综上所述,Objective-C作为iOS开发的首选语言,其面向对象的特点、丰富的在线验证真伪源码内存管理机制和简洁的语法特性,使得开发者能够高效地构建复杂、高效的移动应用。通过合理利用其特性,开发人员可以提高代码质量和开发效率,打造优质的iOS生态产品。
å¦ä½å¨c++ä¸ï¼è°ç¨objective-c
Using C++ With Objective-C
è¹æçObjective-Cç¼è¯å¨å 许ç¨æ·å¨åä¸ä¸ªæºæ件éèªç±å°æ··å使ç¨C++åObjective-Cï¼æ··ç¼åçè¯è¨å«Objective-C++ãæäºå®ï¼ä½ å°±å¯ä»¥å¨Objective-Cåºç¨ç¨åºä¸ä½¿ç¨å·²æçC++ç±»åºã
Objective-CåC++æ··ç¼çè¦ç¹
å¨Objective-C++ä¸ï¼å¯ä»¥ç¨C++代ç è°ç¨æ¹æ³ä¹å¯ä»¥ä»Objective-Cè°ç¨æ¹æ³ãå¨è¿ä¸¤ç§è¯è¨é对象é½æ¯æéï¼å¯ä»¥å¨ä»»ä½å°æ¹ä½¿ç¨ãä¾å¦ï¼C++ç±»å¯ä»¥ä½¿ç¨Objective-C对象çæéä½ä¸ºæ°æ®æåï¼Objective-Cç±»ä¹å¯ä»¥æC++对象æéåå®ä¾åéãä¸ä¾è¯´æäºè¿ä¸ç¹ã
注æï¼Xcodeéè¦æºæ件以".mm"为æ©å±åï¼è¿æ ·æè½å¯å¨ç¼è¯å¨çObjective-C++æ©å±ã
å¤å¶ä»£ç
/* Hello.mm
* Compile with: g++ -x objective-c++ -framework Foundation Hello.mm -o hello
*/
#import <Foundation/Foundation.h>
class Hello {
private:
id greeting_text; // holds an NSString
public:
Hello() {
greeting_text = @"Hello, world!";
}
Hello(const char* initial_greeting_text) {
greeting_text = [[NSString alloc] initWithUTF8String:initial_greeting_text];
}
void say_hello() {
printf("%s/n", [greeting_text UTF8String]);
}
};
@interface Greeting : NSObject {
@private
Hello *hello;
}
- (id)init;
- (void)dealloc;
- (void)sayGreeting;
- (void)sayGreeting:(Hello*)greeting;
@end
@implementation Greeting
- (id)init {
if (self = [super init]) {
hello = new Hello();
}
return self;
}
- (void)dealloc {
delete hello;
[super dealloc];
}
- (void)sayGreeting {
hello->say_hello();
}
- (void)sayGreeting:(Hello*)greeting {
greeting->say_hello();
}
@end
int main() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Greeting *greeting = [[Greeting alloc] init];
[greeting sayGreeting]; // > Hello, world!
Hello *hello = new Hello("Bonjour, monde!");
[greeting sayGreeting:hello]; // > Bonjour, monde!
delete hello;
[greeting release];
[pool release];
return 0;
}
æ£å¦ä½ å¯ä»¥å¨OCæ¥å£ä¸å£°æCç»æä¸æ ·ï¼ä½ ä¹å¯ä»¥å¨OCæ¥å£ä¸å£°æC++ç±»ãè·Cç»æä¸æ ·ï¼OCæ¥å£ä¸å®ä¹çC++ç±»æ¯å ¨å±èå´çï¼ä¸æ¯OCç±»çå åµç±»ï¼è¿ä¸æ åCï¼å°½ç®¡ä¸æ¯C++ï¼æååµå¥ç»æå®ä¹ä¸ºæ件èå´æ¯ä¸è´çï¼ã
为äºå è®¸ä½ åºäºè¯è¨åç§æ¡ä»¶åå°ç¼å代ç ï¼OC++ç¼è¯å¨å®ä¹äº__cpluspluså__OBJC__é¢å¤çå¨å¸¸éï¼åå«æå®C++åOCã å¦åæè¿°ï¼OC++ä¸å 许C++类继æ¿èªOC对象ï¼ä¹ä¸å 许OC类继æ¿èªC++对象ã
å¤å¶ä»£ç
class Base { /* ... */ };
@interface ObjCClass: Base ... @end // ERROR!
class Derived: public ObjCClass ... // ERROR!
ä¸OCä¸åçæ¯ï¼C++对象æ¯éæç±»åçï¼æè¿è¡æ¶å¤ææ¯ç¹æ®æ åµã两ç§è¯è¨ç对象模åå æ¤ä¸è½ç´æ¥å ¼å®¹ãæ´æ ¹æ¬çï¼OCåC++对象å¨å åä¸çå¸å±æ¯äºä¸ç¸å®¹çï¼ä¹å°±æ¯è¯´ï¼ä¸è¬ä¸å¯è½å建ä¸ä¸ªå¯¹è±¡å®ä¾ä»ä¸¤ç§è¯è¨çè§åº¦æ¥çé½æ¯ææçãå æ¤ï¼ä¸¤ç§ç±»åå±æ¬¡ç»æä¸è½è¢«æ··åã
ä½ å¯ä»¥å¨OCç±»å é¨å£°æC++ç±»ï¼ç¼è¯å¨æè¿äºç±»å½ä½å·²å£°æå¨å ¨å±å称空é´æ¥å¯¹å¾ ãå°±åä¸é¢ï¼
å¤å¶ä»£ç
@interface Foo {
class Bar { ... } // OK
}
@end
Bar *barPtr; // OK
OCå 许Cç»æä½ä¸ºå®ä¾åéï¼ä¸ç®¡å®æ¯å¦å£°æå¨OC声æå é¨ã
å¤å¶ä»£ç
@interface Foo {
struct CStruct { ... };
struct CStruct bigIvar; // OK
} ... @end
Objective-C简介
Objective-C,一种扩充了C语言的面向对象编程语言,于年代初由布莱德·确斯在其公司Stepstone发明,主要用于Mac OS X和GNUstep系统。在NeXTSTEP和OpenStep中,Objective-C是基础语言。由于gcc系统包含Objective-C编译器,因此可以在gcc运作的系统上写和编译Objective-C代码。 Objective-C在软件设计和编程中具有高度的实用价值,这主要体现在它的主要描述:年出版的《面向对象编程:演化途径》一书,由Addison Wesley出版社出版,ISBN 0---8。这本书详细阐述了Objective-C的语言特性和编程方法。 在实际应用中,Objective-C是一种编写iOS操作系统应用程序的有力工具,例如iPhone、iPod touch、iPad等苹果移动终端设备的应用程序开发。其用途广泛,尤其在移动应用开发领域有着不可替代的作用。 近年来,Objective-C的流行度不断提升,特别是在年7月的Tiobe编程语言排行榜上,其排名显著提升。这一变化得益于iPhone的成功,因为Objective-C一直是iPhone应用程序的主要开发语言。 总而言之,Objective-C凭借其强大的面向对象编程能力和在iOS应用开发中的广泛应用,已成为不可或缺的编程语言之一。无论是软件开发者还是移动应用开发者,都应掌握Objective-C的基本知识和技能,以便在项目中灵活运用。扩展资料
Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。年代初布莱德·确斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C最主要的描述是他年出版的Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0---8.å¦ä½ç解 Objective-Cç¼ç¨çKVO åç
æ¬ææ¥æºäºï¼cocoachina
ããKVO(Key Value Observing)ï¼æ¯è§å¯è 模å¼å¨Foundationä¸çå®ç°ã
ããKVOçåç
ããç®èè¨ä¹å°±æ¯ï¼
ãã1ãå½ä¸ä¸ªobjectæè§å¯è æ¶ï¼å¨æå建è¿ä¸ªobjectçç±»çåç±»
ãã2ã对äºæ¯ä¸ªè¢«è§å¯çpropertyï¼éåå ¶setæ¹æ³
ãã3ãå¨éåçsetæ¹æ³ä¸è°ç¨- willChangeValueForKey:å- didChangeValueForKey:éç¥è§å¯è
ãã4ãå½ä¸ä¸ªproperty没æè§å¯è æ¶ï¼å é¤éåçæ¹æ³
ãã5ãå½æ²¡æobserverè§å¯ä»»ä½ä¸ä¸ªpropertyæ¶ï¼å é¤å¨æå建çåç±»
ãã空说æ åï¼ç®åéªè¯ä¸ã
ãã@interface Sark : NSObject @property (nonatomic, copy) NSString *name; @end @implementation Sark @end
ããSark *sark = [Sark new]; // breakpoint 1 [sark addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil]; // breakpoint 2 sark.name = @"è¨è¨è¨"; [sark removeObserver:self forKeyPath:@"name"]; // breakpoint 3 æä½ååå«ä½¿ç¨- classåobject_getClass()æåºsark对象çClassåçå®çClass
ãã// breakpoint 1 (lldb) po sark.class Sark (lldb) po object_getClass(sark) Sark // breakpoint 2 (lldb) po sark.class Sark (lldb) po object_getClass(sark) NSKVONotifying_Sark // breakpoint 3 (lldb) po sark.class Sark (lldb) po object_getClass(sark) Sark ä¸é¢çç»æ说æï¼å¨sark对象被è§å¯æ¶ï¼framework使ç¨runtimeå¨æå建äºä¸ä¸ªSarkç±»çåç±»NSKVONotifying_Sarkï¼èä¸ä¸ºäºéèè¿ä¸ªè¡ä¸ºï¼NSKVONotifying_Sarkéåäº- classæ¹æ³è¿åä¹åçç±»ï¼å°±å¥½åä»ä¹ä¹æ²¡åçè¿ä¸æ ·ãä½æ¯ä½¿ç¨object_getClass()æ¶å°±æ´é²äºï¼å 为è¿ä¸ªæ¹æ³è¿åçæ¯è¿ä¸ªå¯¹è±¡çisaæéï¼è¿ä¸ªæéæåçä¸å®æ¯ä¸ªè¿ä¸ªå¯¹è±¡ç类对象
ããç¶åæ¥å·çª¥ä¸ä¸è¿ä¸ªå¨æç±»å®ç°çæ¹æ³ï¼è¿é请åºä¸ä¸ªNSObjectçæ©å±NSObject+DLIntrospectionï¼å®å°è£ äºæå°ä¸ä¸ªç±»çæ¹æ³ãå±æ§ãåè®®ç常ç¨è°è¯æ¹æ³ï¼ä¸ç®äºç¶ã
ãã@interface NSObject (DLIntrospection) + (NSArray *)classes; + (NSArray *)properties; + (NSArray *)instanceVariables; + (NSArray *)classMethods; + (NSArray *)instanceMethods; + (NSArray *)protocols; + (NSDictionary *)descriptionForProtocol:(Protocol *)proto; + (NSString *)parentClassHierarchy; @end
ããç¶å继ç»å¨åæçæç¹å¤è°è¯ï¼
ãã// breakpoint 1 (lldb) po [object_getClass(sark) instanceMethods] <__NSArrayI 0x8e9aa>( - (void)setName:(id)arg0 , - (void).cxx_destruct, - (id)name ) // breakpoint 2 (lldb) po [object_getClass(sark) instanceMethods] <__NSArrayI 0x8d>( - (void)setName:(id)arg0 , - (class)class, - (void)dealloc, - (BOOL)_isKVOA ) // breakpoint 3 (lldb) po [object_getClass(sark) instanceMethods] <__NSArrayI 0x8e9cff0>( - (void)setName:(id)arg0 , - (void).cxx_destruct, - (id)name )
ãã大æ¦å°±æ¯è¯´arcä¸è¿ä¸ªæ¹æ³å¨æædeallocè°ç¨å®æåè´è´£éæ¾ææçåéï¼å½ç¶è¿ä¸ªåKVO没å¥å ³ç³»äºï¼åå°æ£é¢ã
ããä»ä¸é¢breakpoint2çæå°å¯ä»¥çåºï¼å¨æç±»éåäº4个æ¹æ³ï¼
ãã1ã- setName:æ主è¦çéåæ¹æ³ï¼setå¼æ¶è°ç¨éç¥å½æ°
ãã2ã- classéèèªå·±å¿ å¤åï¼è¿ååæ¥ç±»çclass
ãã3ã- deallocåæ¸ çç¯ç½ªç°åºå·¥ä½
ãã4ã- _isKVOAè¿å°±æ¯å é¨ä½¿ç¨çæ 示äºï¼å¤æè¿ä¸ªç±»æ没被KVOå¨æçæåç±»
ããæ¥ä¸æ¥éªè¯ä¸ä¸KVOéåsetæ¹æ³åæ¯å¦è°ç¨äº- willChangeValueForKey:å- didChangeValueForKey:
ããæç´æ¥çéªè¯æ¹æ³å°±æ¯å¨Sarkç±»ä¸éåè¿ä¸¤ä¸ªæ¹æ³ï¼
ãã@implementation Sark - (void)willChangeValueForKey:(NSString *)key { NSLog(@"%@", NSStringFromSelector(_cmd)); [super willChangeValueForKey:key]; } - (void)didChangeValueForKey:(NSString *)key { NSLog(@"%@", NSStringFromSelector(_cmd)); [super didChangeValueForKey:key]; } @end