【问题标题】:Importing Foundation.h, but using :NSObject导入 Foundation.h,但使用 :NSObject
【发布时间】:2013-10-21 21:23:31
【问题描述】:

我有点困惑“:SuperClass”的用途。假设我有一个名为 MyClass 的模型类,它是 NSObject 的子类。我在它的接口中写了这个类是 NSObject 的子类,但实际上我几乎从不只导入 NSObject 头文件。我导入的是整个 Foundation.h 预编译的头文件。

#import <Foundation/Foundation.h> 

@interface MyClass : NSObject

写我从 NSObject 继承而不是 Foundation 是唯一的约定,还是背后有任何其他含义?

【问题讨论】:

    标签: ios objective-c superclass


    【解决方案1】:

    Foundation.h 导入基础框架中存在的所有类,因此导入NSObject.h。 如果你只想导入NSObject.h 你应该使用

    #import <Foundation/NSObject.h>
    

    下面是Foundation.h文件源

    /*  Foundation.h
        Copyright (c) 1994-2013, Apple Inc. All rights reserved.
    */
    
    
    #include <CoreFoundation/CoreFoundation.h>
    
    #import <Foundation/NSObjCRuntime.h>
    
    #import <Foundation/NSArray.h>
    #import <Foundation/NSAutoreleasePool.h>
    #import <Foundation/NSBundle.h>
    #import <Foundation/NSByteOrder.h>
    #import <Foundation/NSCalendar.h>
    #import <Foundation/NSCharacterSet.h>
    #import <Foundation/NSCoder.h>
    #import <Foundation/NSData.h>
    #import <Foundation/NSDate.h>
    #import <Foundation/NSDateFormatter.h>
    #import <Foundation/NSDecimal.h>
    #import <Foundation/NSDecimalNumber.h>
    #import <Foundation/NSDictionary.h>
    #import <Foundation/NSEnumerator.h>
    #import <Foundation/NSError.h>
    #import <Foundation/NSException.h>
    #import <Foundation/NSFileHandle.h>
    #import <Foundation/NSFileManager.h>
    #import <Foundation/NSFormatter.h>
    #import <Foundation/NSHashTable.h>
    #import <Foundation/NSHTTPCookie.h>
    #import <Foundation/NSHTTPCookieStorage.h>
    #import <Foundation/NSIndexPath.h>
    #import <Foundation/NSIndexSet.h>
    #import <Foundation/NSInvocation.h>
    #import <Foundation/NSJSONSerialization.h>
    #import <Foundation/NSKeyValueCoding.h>
    #import <Foundation/NSKeyValueObserving.h>
    #import <Foundation/NSKeyedArchiver.h>
    #import <Foundation/NSLocale.h>
    #import <Foundation/NSLock.h>
    #import <Foundation/NSMapTable.h>
    #import <Foundation/NSMethodSignature.h>
    #import <Foundation/NSNotification.h>
    #import <Foundation/NSNotificationQueue.h>
    #import <Foundation/NSNull.h>
    #import <Foundation/NSNumberFormatter.h>
    #import <Foundation/NSObject.h>
    #import <Foundation/NSOperation.h>
    #import <Foundation/NSOrderedSet.h>
    #import <Foundation/NSOrthography.h>
    #import <Foundation/NSPathUtilities.h>
    #import <Foundation/NSPointerArray.h>
    #import <Foundation/NSPointerFunctions.h>
    #import <Foundation/NSPort.h>
    #import <Foundation/NSProcessInfo.h>
    #import <Foundation/NSPropertyList.h>
    #import <Foundation/NSProxy.h>
    #import <Foundation/NSRange.h>
    #import <Foundation/NSRegularExpression.h>
    #import <Foundation/NSRunLoop.h>
    #import <Foundation/NSScanner.h>
    #import <Foundation/NSSet.h>
    #import <Foundation/NSSortDescriptor.h>
    #import <Foundation/NSStream.h>
    #import <Foundation/NSString.h>
    #import <Foundation/NSTextCheckingResult.h>
    #import <Foundation/NSThread.h>
    #import <Foundation/NSTimeZone.h>
    #import <Foundation/NSTimer.h>
    #import <Foundation/NSURL.h>
    #import <Foundation/NSURLAuthenticationChallenge.h>
    #import <Foundation/NSURLCache.h>
    #import <Foundation/NSURLConnection.h>
    #import <Foundation/NSURLCredential.h>
    #import <Foundation/NSURLCredentialStorage.h>
    #import <Foundation/NSURLError.h>
    #import <Foundation/NSURLProtectionSpace.h>
    #import <Foundation/NSURLProtocol.h>
    #import <Foundation/NSURLRequest.h>
    #import <Foundation/NSURLResponse.h>
    #import <Foundation/NSUserDefaults.h>
    #import <Foundation/NSValue.h>
    #import <Foundation/NSValueTransformer.h>
    #import <Foundation/NSXMLParser.h>
    #import <Foundation/NSZone.h>
    
    #import <Foundation/FoundationErrors.h>
    
    #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
    
    #import <Foundation/NSAttributedString.h>
    #import <Foundation/NSByteCountFormatter.h>
    #import <Foundation/NSCache.h>
    #import <Foundation/NSComparisonPredicate.h>
    #import <Foundation/NSCompoundPredicate.h>
    #import <Foundation/NSExpression.h>
    #import <Foundation/NSFileCoordinator.h>
    #import <Foundation/NSFilePresenter.h>
    #import <Foundation/NSFileVersion.h>
    #import <Foundation/NSFileWrapper.h>
    #import <Foundation/NSLinguisticTagger.h>
    #import <Foundation/NSMetadata.h>
    #import <Foundation/NSMetadataAttributes.h>
    #import <Foundation/NSNetServices.h>
    #import <Foundation/NSPredicate.h>
    #import <Foundation/NSProgress.h>
    #import <Foundation/NSUbiquitousKeyValueStore.h>
    #import <Foundation/NSUndoManager.h>
    #import <Foundation/NSURLSession.h>
    #import <Foundation/NSUUID.h>
    
    #endif
    
    #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || TARGET_OS_WIN32
    
    #import <Foundation/NSArchiver.h>
    #import <Foundation/NSCalendarDate.h>
    #import <Foundation/NSConnection.h>
    #import <Foundation/NSDistantObject.h>
    #import <Foundation/NSDistributedNotificationCenter.h>
    #import <Foundation/NSGeometry.h>
    #import <Foundation/NSPortCoder.h>
    #import <Foundation/NSPortMessage.h>
    #import <Foundation/NSPortNameServer.h>
    #import <Foundation/NSProtocolChecker.h>
    #import <Foundation/NSTask.h>
    #import <Foundation/NSXMLDTD.h>
    #import <Foundation/NSXMLDTDNode.h>
    #import <Foundation/NSXMLDocument.h>
    #import <Foundation/NSXMLElement.h>
    #import <Foundation/NSXMLNode.h>
    #import <Foundation/NSXMLNodeOptions.h>
    #import <Foundation/NSURLDownload.h>
    #import <Foundation/NSURLHandle.h>
    
    #endif
    
    #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
    
    #import <Foundation/NSAffineTransform.h>
    #import <Foundation/NSAppleEventDescriptor.h>
    #import <Foundation/NSAppleEventManager.h>
    #import <Foundation/NSAppleScript.h>
    #import <Foundation/NSClassDescription.h>
    #import <Foundation/NSDistributedLock.h>
    #import <Foundation/NSGarbageCollector.h>
    #import <Foundation/NSHFSFileTypes.h>
    #import <Foundation/NSHost.h>
    #import <Foundation/NSObjectScripting.h>
    #import <Foundation/NSScriptClassDescription.h>
    #import <Foundation/NSScriptCoercionHandler.h>
    #import <Foundation/NSScriptCommand.h>
    #import <Foundation/NSScriptCommandDescription.h>
    #import <Foundation/NSScriptExecutionContext.h>
    #import <Foundation/NSScriptKeyValueCoding.h>
    #import <Foundation/NSScriptObjectSpecifiers.h>
    #import <Foundation/NSScriptStandardSuiteCommands.h>
    #import <Foundation/NSScriptSuiteRegistry.h>
    #import <Foundation/NSScriptWhoseTests.h>
    #import <Foundation/NSSpellServer.h>
    #import <Foundation/NSUserNotification.h>
    #import <Foundation/NSUserScriptTask.h>
    #import <Foundation/NSXPCConnection.h>
    
    #endif
    

    关于写的只是约定吗..

    看到你不会只使用NSObject.h 来实现你的类,你可能需要 NSArray/NSDictionary/NSDate/etc。等等。因此,我们通常不导入所有这些类,而是导入Foundation.h

    【讨论】:

      【解决方案2】:

      看看 Foundation.h - 它正在为您导入所有核心对象。 你可以使用:

      #import <Foundation/NSObject.h>
      

      如果你知道你永远不会使用其他对象 - 但只导入所有 Foundation 类会更方便,因为你会经常使用它们 :)

      而且您应该始终将 NSObject 子类化,因为没有“Foundation”类。

      NSObject 为运行时系统提供了一个基本接口,并且能够像 Objective-C 对象一样工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多