~~Title: Objective-C Style~~
All of our Objective-C classes use a standardized style.
==== Protocols ====
We use the following style for protocols:
/*
* Copyright 2018 SIB Visions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* dd.MM.yyyy - [XX] - creation
*/
/*!
@protocol Foo
@abstract Protocol implemented by Bar.
@discussion That's what they do.
*/
@protocol Foo
#pragma mark -
#pragma mark Required
/*!
@method requiredMethod:
@abstract Validates the specified item.
@param pItem The item to be validated.
*/
- (void)requiredMethod:(id) pItem;
/*!
@method anotherRequiredMethod:
@abstract Applies validation rules.
*/
- (void)anotherRequiredMethod;
#pragma mark -
#pragma mark Optional
@optional
/*!
@method anOptionalMethod:
@abstract Checks optional things.
*/
- (void)anOptionalMethod;
/*!
@method anotherOptionalMethod:
@abstract Checks another optional things.
*/
- (void)anotherOptionalMethod;
@end
The following rules are defined by this template:
* First, all required methods are defined
* Then all optional methods
* Grouping using the #pragma mark ...
* Important changes are documented in the header, including time stamp and author
* Documentation for the protocol declaration and all methods
==== Interfaces ====
We use the following style for interfaces (.h files):
/*
* Copyright 2018 SIB Visions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* dd.MM.yyyy - [XX] - creation
*/
#import "Bar.h"
/*!
@class Foo
@abstract Foo provides a UI element.
@discussion A Foo object is a simple view that can do two things: Jump, Run.
*/
@interface Foo : Bar
{
#pragma mark -
#pragma mark Instance variable declarations
@private
/*! @var value the value of foo. */
float value;
}
#pragma mark -
#pragma mark Property declarations
/*! @property value the value property. */
@property float value;
#pragma mark -
#pragma mark Initialization
/*!
@method initWithString:
@abstract Creates a new foo with string representation of width and height.
@param pString the width and height
@result a new Foo instance.
*/
- (id)initWithString:(NSString *)pString;
#pragma mark -
#pragma mark Method declarations
/*!
@method concatWidth:height:
@abstract Concatenates the width and height.
@param pWidth the width.
@param pHeight the height.
@result the string representation.
*/
+ (NSString *)concatWidth:(float)pWidth height:(float):pHeight;
/*!
@method setWidth:height:
@abstract Sets the foo width and height.
@param pWidth the width.
@param pHeight the height.
*/
- (void)setWidth:(float)pWidth height:(float)pHeight;
@end
The following rules are defined by this template:
* Grouping using the #pragma mark ...
* Important changes are documented in the header, including time stamp and author
* Documentation for the class declaration, ALL methods, properties and variables
==== Classes ====
We use the following style for classes (.m files):
/*
* Copyright 2018 SIB Visions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* dd.MM.yyyy - [XX] - creation
*/
#import "Foo.h";
@implementation Foo
#pragma mark -
#pragma mark Properties
@synthesize value;
#pragma mark -
#pragma mark Initialization
- (id)initWithString:(NSString *)pString
{
...
}
#pragma mark -
#pragma mark Method declarations
+ (NSString *)concatWidth:(float)pWidth height:(float):pHeight
{
...
}
- (void)setWidth:(float)pWidth height:(float)pHeight
{
...
}
@end
The following rules are defined by this template:
* Grouping using the #pragma mark ...
* Important changes are documented in the header, including time stamp and author
==== Unit Tests ====
OCUnit is used as the testing framework.
We use the following style for unit tests:
/*
* Copyright 2018 SIB Visions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* dd.MM.yyyy - [XX] - creation
*/
#import "Foo.h"
@implementation FooTest
#pragma mark -
#pragma mark Internal methods
#pragma mark -
#pragma mark Test methods
/*!
@abstract Tests the init method.
*/
- (void)testInit
{
...
}
@end
The following rules are defined by this template:
* Grouping using the #pragma mark ...
* Each test class ends with "Test"
* Each test method starts with "test"
* Important changes are documented in the header, including time stamp and author
* Documentation for the class declaration and all test methods