Objective-C基础教程是我买的第一本关于iOS开发的书籍,今天拿出来重新阅读,重新学习一遍。
本书的前两章介绍了OC的历史,并创建了一个简单的OC程序,作者写这本书时,iOS才是iOS5,Xcode版本是4.2。今天再来学习,iOS已经是iOS11了,Xcode版本是9.4。真的是变化了不少。按照书中的例子新建一个OC程序。
编写一个简单的程序。
#import
BOOL areIntsSame(int num1, int num2){
if (num1 == num2) {
return YES;
}
return NO;
}
NSString *boolString(BOOL yesNo){
if (yesNo == YES) {
return @"YES";
}
return @"NO";
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
BOOL areTheySame;
areTheySame = areIntsSame(5, 5);
NSLog(@"Are %d and %d same? %@.", 5, 5, boolString(areTheySame));
areTheySame = areIntsSame(10, 5);
NSLog(@"Are %d and %d same? %@.", 10, 5, boolString(areTheySame));
}
return 0;
}
第三章介绍了面向对象编程的基础知识
记一下Xcode如何修改命令行参数,也就是修改启动参数。
使用快捷键shift+command+,
一些属于
类(class):是一种表示对象类型的结构体。类名一般首字母大写,可以添加前缀字母,比如我就在经常在自己的类前面添加CYC或者CCY前缀标识。
对象(object 和 实例(instance):是一种包含值和指向其类的隐藏指针的结构体。
消息(message):对象可以执行的操作。
方法(method):为响应消息而运行的代码。
方法调度(method dispatch):是OC使用的一种机制,用于推测执行什么方法来响应某个特定的消息。
接口和实现
接口是类为对象提供的特性描述。实现是使接口能正常工作的代码。OC允许接口和实现间的参数名不同。
OC方法的声明,时间久了就忘了要怎么声明,返回类型在前面,冒号后面跟参数,参数类型用括号括起来。和C语言的函数语法略有不同。
- (void)setColor:(UIColor *)color;
OC中没有真正的私有方法,这是OC动态本质的副作用。有利就有弊。
开放/关闭原则。软件实体应该对扩展开放,对修改关闭。虽然不是很明白,但是觉得说的很有道理。
这一章的代码很多是粘贴复制来的,出现了大量重复的代码。于是引出了第四章的内容——继承。
UML(Unified Modeling Language,统一建模语言),使用UML可以表示类以及类之间的关系。
OC不支持多继承,可以通过OC的其他特性达到多继承的效果。如类别和协议。
当代码发送消息时,在当前类中搜索相应的方法,如果没找到就在对象的父类中进行查找。如果最后都没有找到,则会出现一个运行时的错误,编译时会有一个警告⚠️信息。
在创建一个新类时,其对象会从它的父类继承实例变量,再添加自己的实例变量。
重写方法时,调用父类的方法总是一个明智之举,这样可以试想更多的功能。
继承在子类和父类之间建立了一种“is a”(是一个)的关系。
复合的类之间建立的关系是“has a”(有一个)。
复合也是OOP的基础概念,通过复合可以创建引用其他对象的对象。
在实际的开发中,一个类通常会有一个头文件(.h)和一个实现文件(.m)。导入头文件使头文件和源文件之间建立了一种紧密的依赖关系,Xcode记录了所有的依赖关系。使用@class指令告诉编译器“相信我,你会知道这个类的”,可以减少导入头文件的数量,从而缩短了编译时间。
第7章讲了Xcode开发工具,由于当时的版本是4.2,现在版本是9.4。很多地方都变得不一样了。Xcode使开发iOS程序变得更加容易。熟练的使用Xcode可以节省大量的时间,来做一些更有意义的事情。
第八章介绍了Foundation框架,
在Xcode安装目录下,找到Foundation目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework/Headers
里面包含了所有的头文件,查看这些头文件可以了解更多的内容。
Foundation.apinotes NSMeasurementFormatter.h
Foundation.h NSMetadata.h
FoundationErrors.h NSMetadataAttributes.h
FoundationLegacySwiftCompatibility.h NSMethodSignature.h
NSArray.h NSNetServices.h
NSAttributedString.h NSNotification.h
NSAutoreleasePool.h NSNotificationQueue.h
NSBundle.h NSNull.h
NSByteCountFormatter.h NSNumberFormatter.h
NSByteOrder.h NSObjCRuntime.h
NSCache.h NSObject.h
NSCalendar.h NSOperation.h
NSCharacterSet.h NSOrderedSet.h
NSCoder.h NSOrthography.h
NSComparisonPredicate.h NSPathUtilities.h
NSCompoundPredicate.h NSPersonNameComponents.h
NSData.h NSPersonNameComponentsFormatter.h
NSDate.h NSPointerArray.h
NSDateComponentsFormatter.h NSPointerFunctions.h
NSDateFormatter.h NSPort.h
NSDateInterval.h NSPredicate.h
NSDateIntervalFormatter.h NSProcessInfo.h
NSDecimal.h NSProgress.h
NSDecimalNumber.h NSPropertyList.h
NSDictionary.h NSProxy.h
NSEnergyFormatter.h NSRange.h
NSEnumerator.h NSRegularExpression.h
NSError.h NSRunLoop.h
NSException.h NSScanner.h
NSExpression.h NSSet.h
NSExtensionContext.h NSSortDescriptor.h
NSExtensionItem.h NSStream.h
NSExtensionRequestHandling.h NSString.h
NSFileCoordinator.h NSTextCheckingResult.h
NSFileHandle.h NSThread.h
NSFileManager.h NSTimeZone.h
NSFilePresenter.h NSTimer.h
NSFileVersion.h NSURL.h
NSFileWrapper.h NSURLAuthenticationChallenge.h
NSFormatter.h NSURLCache.h
NSHTTPCookie.h NSURLConnection.h
NSHTTPCookieStorage.h NSURLCredential.h
NSHashTable.h NSURLCredentialStorage.h
NSISO8601DateFormatter.h NSURLError.h
NSIndexPath.h NSURLProtectionSpace.h
NSIndexSet.h NSURLProtocol.h
NSInvocation.h NSURLRequest.h
NSItemProvider.h NSURLResponse.h
NSItemProviderReadingWriting.h NSURLSession.h
NSJSONSerialization.h NSUUID.h
NSKeyValueCoding.h NSUbiquitousKeyValueStore.h
NSKeyValueObserving.h NSUndoManager.h
NSKeyedArchiver.h NSUnit.h
NSLengthFormatter.h NSUserActivity.h
NSLinguisticTagger.h NSUserDefaults.h
NSLocale.h NSValue.h
NSLock.h NSValueTransformer.h
NSMapTable.h NSXMLParser.h
NSMassFormatter.h NSXPCConnection.h
NSMeasurement.h NSZone.h